std map和multimap迭代器是一样的吗?

时间:2013-09-24 02:32:54

标签: c++ map iterator multimap

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之间没有区别吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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