Warum druckt der folgende Code 1
, obwohl ich zwei Elemente in die Karte einfügen? Wie überprüft Std: Map, ob zwei Objekte gleich sind?
#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;
}
Der zweite Aufruf von insert()
sagt, dass wir bereits das Element in der Karte. Warum?
Mein previous question wurde versehentlich wegen des Tippfehlers geschlossen. Ich weiß, dass insert
Ihnen sagen wird, ob dieses Element bereits in dem Container ist.
'Operator <' muss eine strenge schwache Ordnung definieren. Deines nicht. – Pubby
@Pubby Was meinst du mit "streng schwacher Ordnung"? – FrozenHeart
http://StackOverflow.com/Questions/979759/Operator-and-Strict-weak-Ordering – Pubby