0
std::multimap<int, int> my_map;
for(int i=0; i<10; ++i)
{
    my_map.insert(std::pair<int, int>(i, i));
    my_map.insert(std::pair<int, int>(i, i));
}

std::multimap<int, int>::iterator it(my_map.begin());
std::multimap<int, int>::iterator end(my_map.end());
for(; it!=end; ++it)
{
    cout << it->first << " " << it->second << endl;
}

std::map<int, int>::iterator it(my_map.begin());
std::map<int, int>::iterator end(my_map.end());
for(; it!=end; ++it)
{
    cout << it->first << " " << it->second << endl;
}

为什么两个循环迭代会my_map产生相同的结果?std::multimap::iterator 和 std::map::iterator 之间没有区别吗?

4

2 回答 2

1

std::multimap编译器的实现很可能std::map使用相同的迭代器,或者意外兼容的东西。这并不意味着这种行为是有保证的。它可能会在下一个版本的编译器中发生变化,更不用说使用另一个编译器了。

于 2013-09-24T02:40:07.673 回答
0

迭代器不一样,但我认为排序是一样的。For multimapormap元素按其键排序。顺序由其内部比较对象(比较类型)指示的特定严格弱排序标准确定。

在您的示例中,两种情况下的键顺序相同。我想这就是原因。

于 2013-09-24T02:54:26.370 回答