草庐IT

unordered_container

全部标签

c++ - std::unordered_multiset 插入的复杂性

为什么std::unordered_multiset插入的最坏情况复杂度是线性的?我明白为什么std::unordered_set会这样(你必须检查插入的值不在集合中)但对于multiset我不明白。我是否遗漏了一些明显的东西? 最佳答案 std::unordered_multiset::insert()的最坏情况复杂度是线性的,因为:据说支持非唯一键的无序关联容器支持等效键。迭代这些容器时,具有等效键的元素在迭代中彼此相邻,形成等效键组。迭代器函数需要恒定的摊销时间。例如,考虑将5、13和13插入到unordered_multis

Python 字典与 C++ 标准 :unordered_map (cython) vs cythonized python dict

我试图测量python字典、cythonizedpython字典和cythonizedcppstd::unordered_map之间的性能,只做一个初始化过程。如果编译cythonizedcpp代码我认为它应该比纯python版本更快。我使用4种不同的场景/符号选项进行了测试:使用std::unordered_map和Cythonbooknotation的CythonCPP代码(定义一对并使用插入方法)使用std::unordered_map和python符号(map[key]=value)的CythonCPP代码使用python字典(map[key]=value)的Cython代码(

c++ - 清空后减少 std::unordered_map 内存占用

假设我有一个std::unordered_map对象,我向其中添加了一些元素,然后删除了它们。除了构造一个新对象来替换旧对象之外,是否有一种方法可以强制减少map对象的内存占用,类似于std::vector::shrink_to_fit()? 最佳答案 由于节点是根据需要分配和删除的,因此唯一可以减少的内存是桶列表使用的内存。这可以通过在unordered_map上调用rehash(0)来完成(参数是要使用的桶的最小数量;实际数量可以根据存储在map中的东西和map的max_load_factor())。这可能是一项耗时的操作,具体

c++ - 保证 std::container::size_type 是一个 std::size_t

正在关注thisquestion,我决定使用std::size_t作为size_type对于每个容器,出于明显的可读性原因。我知道这在理论上是可能的std::container::size_type不是std::size_t,但我认为我当前和future的配置并非如此。但是,为了避免恶意错误,我在使用它们时会检查类型是否相同。例如:BOOST_STATIC_ASSERT(boost::is_same::size_type,std::size_t>::value);std::vectorx;/*fillx*/for(std::size_ti=0;i代码的另一个地方,我使用了一个std::

C++ unordered_map<string, ...> 不构造字符串的查找

我有C++代码可以调查一个大字符串并匹配很多子字符串。我尽可能避免构造std::strings,方法是像这样编码子字符串:char*buffer,size_tbufferSize然而,在某些时候,我想在其中一个中查找子字符串:std::unordered_mapstringToInfo={...所以,为了做到这一点,我去:stringToInfo.find(std::string(buffer,bufferSize))构造一个std::string的唯一目的是查找。我觉得我可以在这里做一个优化,通过...将unordered_map的键类型更改为某种临时字符串冒名顶替者,一个像这样的类

c++ - 如何在不删除元素并将其重新插入到 boost::multi_index_container 的情况下移动元素?

我正在使用boost::multi_index_container提供对元素集合的随机访问和基于散列的访问。我想更改元素的随机访问索引,而不更改基于哈希的索引。这是一段代码:#include#include#include#include#includeusingnamespacestd;usingnamespaceboost;usingnamespaceboost::multi_index;//classrepresentingmyelementsclassElement{public:Element(conststring&new_key):key(new_key){}string

c++ - 从 unordered_map move 键

我已经搜索过,但我只发现了关于使用映射值move构造函数的问题,但我想尝试一些不同的东西。是否可以使用std::move来自std::unordered_map的key?原因很简单:我想构建一个示例,在该示例中我从map创建一个vector,尽可能少地浪费内存。我知道这会弄乱map的表示,但是嘿,毕竟我再也不会使用map了,所以移出值是有意义的。我的猜测是:不,我不能那样做。不过,我想确认一下。这是一个简单的代码。我希望看到move构造函数被调用,但我调用了复制构造函数。干杯,谢谢!#include#include#include#include#includeclassprop{pu

c++ - unordered_map 的最坏情况是什么?

我找到了很多关于map和unordered_map的复杂性的帖子。据说unordered_map的最坏情况复杂度为O(N)。出于我的目的,我将输入排序值,如125691112..。我需要插入或查找并删除一个值。我将不得不经常插入/删除。我想过使用set,它在所有情况下都具有log(n)的复杂性。然后我偶然发现了具有最佳O(1)复杂度的unordered_map。但是我需要了解在我的场景中我会面临unordered_map的最坏情况吗?又会是怎样的场景?编辑:在我的例子中,所有值都是唯一的。 最佳答案 unordered_map最坏的

c++ - 如何实现用于 std::unordered_map 的 CString 哈希函数?

我要声明:std::unordered_mapm_mapMyMap;但是当我构建时,我得到一个错误,告诉我标准C++没有为CString提供散列函数,而CString有(LPCSTR)运算符。如何正确实现CString的哈希函数? 最佳答案 基于std::string的MSSTL实现,我创建了以下可用于std::unordered_set和std::unordered_map的方法:namespacestd{templatestructhash{//hashfunctorforCStringsize_toperator()(cons

c++ - 将具有指针值类型的 unordered_map 上的迭代器转换为具有 const 引用值类型的同一映射上的迭代器

我有以下类(class):#include#includeclassNode{public:typedefstd::unique_ptrptr_type;typedefstd::unordered_mapmap_type;typedef/**???**/const_iterator;const_iteratorbegin()const;const_iteratorend()const;private:map_type_children;};如您所见,我想要一种方法让此类的用户遍历_children的元素。而无法修改它们。这就是为什么我想创建一个指向pair类型元素的迭代器的原因而不是p