オブジェクトをキーとしてイテレータをSTLマップから返すことに問題があります。オブジェクトをキーとして使用するときにSTLマップからイテレータを返す
map.insert()を実行するだけでコードはコンパイルされますが、map.insert()から返されたイテレータを使用しようとしている行はコンパイルされません。
コンパイラエラーが「エラー: 『演算子=』の不一致」である
すぐ下のコードスニペットでreturn文の前に問題のある行を参照してください。
ありがとうございました!
#include <map>
using namespace std;
class Keys {
public:
Keys(int k1, int k2) :
key1(k1), key2(k2) {
}
bool operator<(const Keys &right) const {
return (key1 < right.key1 && key2 < right.key2);
}
int key1;
int key2;
};
int main() {
std::map<Keys, int> mymap;
map<Keys,int>::iterator myitr;
mymap.insert(std::pair<Keys, int>(Keys(3, 8), 5));
myitr = mymap.insert(std::pair<Keys, int>(Keys(1, 2), 3));
return 0;
}
彼は 'のstdを使用することができ:: make_pair(キーズ(1、2)、3)'の代わりに ':だから
を、あなたのコードは次のようになります必要がありますstd :: pair(キー(1,2)、3) ' –
Nawaz
迅速で有益な応答をありがとう。私はオブジェクト内に複数のキーを追加する過程でマルチマップから切り替えていましたが、マップとマルチマップ間の戻り値の差を偶然に見逃しました。 – ManNamedJed
@Nawaz:確かに可能です。私はOPに 'std :: map'を使う方法を学んでいると思いますし、ユーティリティ関数' make_pair()ではなく 'pair'を使って試してみたいと思います。 'これは、より良い選択肢です。 –