How a map (or other sorted associated container) behaves is undefined when its comparator is not a trichotomy, although at the least you would expect two things which should be considered equal to be found not equal:
$ cat t.cc #include <map> #include <iostream> int main() { std::map<int, int> good_map; good_map.insert(std::make_pair(1, 1)); good_map.insert(std::make_pair(1, 1)); std::cout << "good map size = " << good_map.size() << ".\n"; std::map<int, int, std::less_equal<int> > bad_map; bad_map.insert(std::make_pair(1, 1)); bad_map.insert(std::make_pair(1, 1)); std::cout << "bad map size = " << bad_map.size() << ".\n"; } $ g++ -o t -ansi -pedantic t.cc $ ./t good map size = 1. bad map size = 2. $ CC -o t t.cc $ ./t good map size = 1. bad map size = 2. $
Because the (non-trichotomus) map less-than operator <=
is true for 1
<= 1
, the map does not consider the pairs (1, 1)
(1, 1)
to be equal
and inserts them both.
This page last modified on 12 March 2004.