草庐IT

unordered_multimap

全部标签

c++ - 如何将元素插入 multimap ?

我想在C++中设置一个multimap如下:multimap,vector>mmList;但是我怎样才能在其中插入数据呢?我尝试了以下代码,但它没有编译:mmList.insert(pair,vector("a","b",test)); 最佳答案 您可以使用std::make_pair(a,b)构造对。通常,您可以将对插入到map/多map中。在您的情况下,您必须构造一个由字符串对和vector组成的对:std::multimap,std::vector>mmList;std::vectorvec;mmList.insert(std

c++ - unordered_map 和引用上基于范围的 for 循环

这个问题在这里已经有了答案:structuredbindings:whensomethinglookslikeareferenceandbehavessimilarlytoareference,butit'snotareference(2个回答)关闭4年前。在std::unordered_map上运行基于范围的for循环时,循环变量的类型似乎不使用引用类型:std::unordered_mapmap={{0,1},{1,2},{2,3}};for(auto&[l,r]:map)static_assert(std::is_same_v);MSVC2017、gcc8.2和clang7.0.

c++ - 如何将 unordered_set 与自定义类型一起使用?

我是否需要为自定义类型创建自己的哈希函数?unordered_set没有我可以使用的默认值吗? 最佳答案 标准库包含std::hash的特化对于基本类型、指针和std::string(或者更确切地说,对于std::basic_string的所有特化)。不幸的是,该库不包含以下重要的new-from-old组合功能,但它是Boost的一部分,您应该将其复制到您的代码中:templateinlinevoidhash_combine(std::size_t&seed,constT&v){std::hashhasher;seed^=hash

c++ - set vs unordered_set 最快迭代

在我的应用程序中,我有以下要求-数据结构将只用一些值(不是键/值对)填充一次。这些值可能会重复,但我希望数据结构只存储一次。我将遍历上面创建的数据结构的所有元素100次。元素在迭代中出现的顺序无关紧要。约束1表明我必须使用set或unordered_set,因为数据不是键值对的形式。现在集合插入比unordered_set插入成本更高,但数据结构仅在我的程序开始时填充一次。我相信决定因素将是我能够以多快的速度迭代数据结构的所有元素。为此,我不确定set或unordered_set是否会更快。我相信标准没有提到这个事实,因为对于任何一种数据结构,这个操作都是O(n)。但我想知道哪个数据结

c++ - 在 unordered_map 中选择随机元素

我这样定义一个unordered_map:std::unordered_mapedges;有没有一种从unordered_map边中选择随机边的有效方法? 最佳答案 C++11之前的解决方案:std::tr1::unordered_mapedges;std::tr1::unordered_map::iteratorrandom_it=edges.begin();std::advance(random_it,rand_between(0,edges.size()));C++11以后的解决方案:std::unordered_mapedg

c++ - 以 std::pair 作为键创建 std::unordered_map

我正在尝试创建一个以std::pair作为键的std::unordered_map。你可以想象,这需要我显式地提供一个类来为给定的键生成哈希,以及键的相等比较器。到目前为止,这是我的代码:#include#include#includetemplatestructPairHash{size_toperator()(conststd::pair&key){returnstd::hash()(key.first)^std::hash()(key.second);}};templatestructPairEqual{booloperator()(conststd::pair&lhs,cons

c++ - std::unordered_map::insert 的重载

你能教我为什么两者兼而有之std::unordered_map::insert(constvalue_type&)和templatestd::unordered_map::insert(P&&)存在于标准中?我认为insert(P&&)可以作为insert(constvalue_type&)。 最佳答案 这两个重载autostd::unordered_map::insert(constvalue_type&)->...templateautostd::unordered_map::insert(P&&)->...各有优势,谁也不能完

c++ - map vs unordered_map 几个元素

我正在尝试在map和unordered_map之间进行选择以用于以下用例:map的键是一个指针。最常见的用例是map中只有一个元素。通常,map中的最大元素数小于10。map访问频率很高,速度是最重要的因素。很少更改map。虽然在这里测量速度显然是正确的方法,但此代码将在多个平台上使用,因此我试图创建一个通用的经验法则,用于在map和之间进行选择unordered_map基于元素的数量。我在这里看到一些帖子暗示std::map对于少量元素可能更快,但没有给出“小”的定义。是否有根据元素数量在map和unordered_map之间进行选择的经验法则?另一种数据结构(例如通过vector的

c++ - STL 的 multimap 如何插入尊重排序?

我有一些带有整数索引的数据。我不断生成新数据,这些新数据需要添加到我拥有的数据集合中,按该索引排序,同时我希望能够轻松地开始数据并遍历它。这听起来std::multimap正是我所需要的。但是,我还需要按照插入顺序保存具有相同索引的数据,在这种情况下,这意味着当我遍历数据时,我会先获取较早的数据,然后再获取较晚的数据。multimap会这样做吗?我没有找到任何保证是这种情况。在sgi手册中,我没有看到任何提及是否。我在gcc4.3.4实现上进行了尝试,对于一些有限的测试用例似乎是正确的,但我当然想知道标准是否要求这样做,我可以依赖这个事实。编辑:为了更清楚地回应一些答案,我希望数据首先

c++ - 带有 unordered_map 的模板代码膨胀

我想知道unordered_map使用类型删除实现,因为unordered_map和unordered_map可以使用完全相同的代码(除了强制转换,这是机器代码中的无操作)。也就是说,两者的实现都可以基于unordered_map。以节省代码大小。更新:这种技术通常被称为ThinTemplateIdiom(感谢下面的评论者指出这一点)。更新2:我对HowardHinnant特别感兴趣的意见。让我们希望他能读到这篇文章。所以我写了这个小测试:#include#ifBOOST#includeusingboost::unordered_map;#else#includeusingstd::u