c++ - 遍历无序 multimap

标签 c++ dictionary stl

我在我的 unordered_multimap 中插入了一些元素,我发现所有值都映射到使用相等范围的键 k。现在我想按插入顺序遍历这些映射值。查看代码以更好地理解。

#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
    unordered_multimap<int,int> m;
    m.insert(make_pair(1,2));
    m.insert(make_pair(1,3));
    m.insert(make_pair(1,4));
    auto it = m.equal_range(1);
    for(auto it1 = it.first; it1 != it.second; it1++) {
        cout<<it1->second<<endl;
    }
}

输出:

4
3
2

但我想按照插入键和映射值的顺序进行遍历。所以,我想按照2,3,4的顺序遍历。可能吗?

最佳答案

没有一种直接的方法可以满足您的要求。当元素被插入到有序或无序的多映射中时,它们实际上被放置在内部结构中,并且不知道它们的放置顺序。

你应该有一个辅助,例如一个 std::queue 容器,您可以在其中将迭代器附加到插入的元素。迭代器可以从插入中获得:

auto inserted_pos = m.insert(make_pair(1,4));

请记住,迭代器在插入期间不会失效。如果元素被删除,它们将失效,并且仅针对相关元素。

关于c++ - 遍历无序 multimap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34357136/

相关文章:

c++ - 如何将 boost::shared_ptr (或另一个智能指针)附加到对象父对象的引用计数器?

c++ - 如何在 C++ double 或 int 变量中存储某种 "null"?

c++ - qt qslider不流畅

python - 用于分隔 numpy 数组的字典键和值

c++ - 抽象线程相关的 STL 和 Boost 类型和方法

c++ - boost::range 如何使用管道输入在 map 中插入元素

c++ - 你如何在 XCode + C++ 中使用 std::vector?

python - 如何在尚不存在的键下创建嵌套字典?

ios - 从 Plist 中检索颜色。 iOS

c++ - 在映射中插入一对时,C++ 是否需要额外的代码?