Должен признать, что я никогда не изучал стандартную библиотеку должным образом, но это застало меня врасплох
#include <iostream>
#include <map>
int main (int argc, char ** argv)
{
std::multimap<int, int> mm1;
mm1.insert( std::pair<int, int>(0, 0) );
mm1.insert( std::pair<int, int>(0, 1) );
std::multimap<int, int> mm2;
mm2.insert( std::pair<int, int>(0, 1) );
mm2.insert( std::pair<int, int>(0, 0) );
std::cout << "The maps are "
<< ( (mm1 == mm2) ? "equal" : "not equal" )
<< std::endl;
}
И, попробовав это, мы получили ...
$ g++ --std=c++11 -o multimaporder multimaporder.cc
$ ./multimaporder
The maps are not equal
Итак, порядок размещения вещей на карте имеет значение.Это не было бы моим первым ожиданием для ассоциативного контейнера, но хорошо.
С контейнером с произвольным доступом мой следующий план, как правило, состоял бы в том, чтобы отсортировать их и затем сравнить ... но добавив
#include <algorithm>
//...
std::sort( mm1.begin(), mm1.end() );
std::sort( mm2.begin(), mm2.end() );
std::cout << "The *sorted* maps are "
<< ( (mm1 == mm2) ? "equal" : "not equal" )
<< std::endl;
просто результаты - это множество жалоб на то, что не удалось найти приемлемый набор итераторов для sort
.
Так что же это правильный способ выяснить, если два multimap
имеют одинаковое содержимое