マップに2つの要素を挿入しても、次のコードでは1
が印刷されるのはなぜですか?std:mapは2つのオブジェクトが等しいかどうかをどのようにチェックしますか?
#include <iostream>
#include <map>
#include <string>
#include <utility>
struct Foo
{
Foo(int bar, const std::string& baz)
: bar(bar)
, baz(baz)
{}
int bar;
std::string baz;
bool operator<(const Foo& rhs) const
{
if (bar < rhs.bar && baz < rhs.baz)
{
return true;
}
else
{
return false;
}
}
};
int main()
{
Foo first(0, "test");
Foo second(1, "test");
std::map<Foo, std::string> m;
m.insert(std::make_pair(first, "test"));
m.insert(std::make_pair(second, "test1"));
std::cout << m.size() << std::endl;
}
insert()
への2回目の呼び出しでは、既にマップにその項目があります。どうして?
私のprevious questionはタイプミスのため誤って閉じられました。私はinsert
は、その項目がすでにコンテナに入っているかどうかを教えてくれることを知っています。
'演算子:
はあなたのような何かを必要としています。あなたはしません。 – Pubby
@Pubby「厳密な弱い注文」とはどういう意味ですか? – FrozenHeart
http://stackoverflow.com/questions/979759/operator-and-strict-weak-ordering – Pubby