草庐IT

unordered_container

全部标签

c++ - 有效删除 tr1::unordered_map 中的元素

我正在试验tr1::unordered_map并偶然发现了如何解决这个问题有效地删除元素。“删除”方法提供按键删除或通过迭代器。我认为后者更有效率,因为前者大概涉及隐式查找操作。另一方面,我的调查网上有透露迭代器调用后可能会失效insert()方法。我对典型的现实世界情况感兴趣,其中将对象放入哈希表有一个足够长的生命周期,以便在此期间调用insert()生命周期。因此我可以得出结论,在这种情况下,按键删除是唯一的还剩选项?有没有其他方法可以更有效地删除对象?我是充分意识到这个问题只在发生删除的应用程序中很重要经常。我当前的项目是否会出现这种情况,还有待观察,但是我宁愿在设计我的项目时了

c++ - const decltype(*std::begin(container))& val 不会使 val const?

这段代码:std::vectorints(5,1);std::for_each(ints.begin(),ints.end(),[](constdecltype(*std::begin(ints))&val){val*=2;});在VisualStudio2010中编译和运行得很好,并且修改容器中的每个值,就像没有const关键字一样。这是编译器中的错误吗,因为预期的行为是val是不可修改的?(换句话说,我希望它不会编译,但它会编译)更新:std::for_each(ints.begin(),ints.end(),[](conststd::remove_reference::type&

c++ - 插入 unordered_map 时没有匹配函数

我声明一个unordered_map如下:boost::unordered_map,t_torrent>torrent_ins;然后向其中插入一个元素(如果键不存在,该映射将返回新元素的引用)t_torrent&torrent_in=torrent_ins[to_array(in)];但是我收到一条错误信息:../src/Tracker/torrent_serialization.cpp:30:instantiatedfromhere/usr/local/include/boost/functional/hash/extensions.hpp:176:error:nomatchingf

c++ - 通过 operator[] 访问静态成员 unordered_map

作为C++的新手,我遇到了一些我不太理解的行为,并且即使通过大量谷歌搜索也无法找到解释,所以我希望有人能解释这里到底出了什么问题。//test.h#includetypedefstd::unordered_maptest_type;classtest{public:staticconsttest_typetmap;};//test.cpp#include"test.h"consttest_typetest::tmap={{1,1}};//main.cpp#include"test.h"intmain(){//Attempt1:accesskeyviaoperator[]std::cou

c++ - 使用两个对象作为 unordered_map 或替代方案的哈希键

定义对象myType后,我需要存储这些对象之间的关系。这些关系存储在矩阵中。事先不知道元素的数量,并非所有元素都有关系(element1可以与element3有关系,但可能与5没有关系)并且内存是一个问题。例如它可能看起来像:element45与:具有特征[3,1;1,4]的元素3具有特征[1,1;1,1]的元素12具有特征[8,1;1,4]的元素1780element1661连接到:具有特征[3,1;6,4]的元素3具有特征[1,1;1,9]的元素1具有特征[8,1;1,1]的元素1780拥有:myType*element1;myType*element2;我想要类似的东西(正确指出

c++ - 填充 unordered_set 的更有效方法?

我有一个连续存储在内存中的整数数组,我想将它们全部添加到unordered_set集合中。现在,我一次添加一个。for(inti=0;i有什么方法可以更有效地做到这一点?我意识到项目在集合中不是连续存储的,所以它不会像将数组交给集合那样简单。但这可以以某种方式优化吗? 最佳答案 unordered_set有一个构造函数,它接受一系列元素来初始添加它们:templateunordered_set(InputItfirst,InputItlast,size_typebucket_count=/*implementation-define

c++ - boost::container 是否支持 C++11 初始化列表?

在Boost.Container网站上我们可以看到:Boost.Containerdoesnotsupportinitializerlistswhenconstructingorassigningcontainersbutitwillsupportitforcompilerswithinitialized-listsupport.(...)对不起,如果我只是愚蠢,但我真的不知道如何阅读它。这是否意味着它会在不可预测的future这样做,或者它现在应该与符合标准的编译器一起工作?我已经在GCC4.7和ICC13.0上测试过它,两者都不起作用,但我相信我可能错过了一些非常重要的东西,比如正

java - 使用 contains() 检查 Java ArrayList 中的零

我有这段代码片段,它基本上是在long整数的ArrayList中检查0值。importjava.io.*;importjava.util.*;classmain{publicstaticvoidmain(String[]args)throwsjava.lang.Exception{longzero=0;ArrayListalist=newArrayList();alist.add(zero);if(alist.contains(0))System.out.println("containszero");elseSystem.out.println("containsnozero");}

c++ - 为 std::unordered_map 中的 const std::reference_wrapper 重载 operator==

我不知道如何使用std::reference_wrapper将std::string引用获取到std::unordered_map中>。根据以下链接,我知道我需要重载operator==。Whycantemplateinstancesnotbededucedin`std::reference_wrapper`s?但是,我不知道如何编写operator==以使其采用conststd::reference_wrapper。如果包装器不是const,那将不是问题。使用char而不是std::string效果很好(不需要重载operator==)。代码:#include#include#inc

c++ - 分配器 : how are the standard containers expected to work internally?

作为这个问题的示例,我将使用std::vector。它的定义来自documentation如下:template>class vector;正如预期的那样,如果T是它的类型,分配器应该偏向于T。总之,下面的代码编译没有错误(至少,使用GCC)并运行:#include#include#includestructS{inti;doubled;std::strings;};intmain(){std::allocatoralloc;std::vector>v{alloc};v.push_back(S{});}在这里,我通过使用专注于int的分配器创建vector的S。它是合法的代码吗?我应该