こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

vectorを使用したときのクラス定義について

現在C++で、STLのvectorを学習しているのですが、
本を見ると

ベクトルに保存されるクラスオブジェクトについて
「"<" および "=="を定義する必要がある」
っと書いてあります。

実際のサンプルなどでは、(長くなってしまってすみません)

// ベクトルにクラスオブジェクトを保存する
#include <iostream>
#include <vector>
using namespace std;

class Demo {
double d;
public:
Demo() { d = 0.0; }
Demo(double x) { d = x; }
Demo &operator=(double x) {
d = x; return *this;
}
double getd() { return d; }
};

bool operator<(Demo a, Demo b)
{
return a.getd() < b.getd();
}

bool operator==(Demo a, Demo b)
{
return a.getd() == b.getd();
}

int main()
{
vector<Demo> v;
int i;

for(i=0; i<10; i++)
v.push_back(Demo(i/3.0));

for(i=0; i<v.size(); i++)
cout << v[i].getd() << ' ';
cout << endl;

for(i=0; i<v.size(); i++)
v[i] = v[i] .getd() * 2.1;

for(i=0; i<v.size(); i++)
cout << v[i].getd() << ' ';
cout << endl;
return 0;
}

っというように書かれています。

ここで、なぜ<や==演算子をオーバーロードする必要があるのかが わかりません。
VC6.0やbccコンパイラで、演算子のオーバーロード箇所をコメントにしても通ってしまいます。

また、本には、「コンパイラによってはその他の比較演算子の定義も必須とされています」っとあります。

お手数おかけしますが、この辺りのことを簡単に(初心者なので・・・)教えていただけたら。と思います。
よろしくお願いします。

投稿日時 - 2005-02-10 16:34:24

QNo.1211930

困ってます

質問者が選んだベストアンサー

> ここで、なぜ<や==演算子をオーバーロードする必要があるのかが わかりません。

おそらく、「ソート(sort)や検索(find)などのアルゴリズムを適用したいならば」という但し書きが欠落しているのではないかと思います。

投稿日時 - 2005-02-10 17:34:58

お礼

お返事ありがとうございます。

やはり、そう読み代えると納得できそうです。
つまらないことで、時間をかけずに済みました。
ありがとうございます。

投稿日時 - 2005-02-19 13:23:46

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)