相关疑难解决方法(0)

在预先知道大小时初始化std :: map

我想初始化一个std::map.现在我正在使用,::insert但我觉得我浪费了一些计算时间,因为我已经知道我想要分配的大小.有没有办法分配固定大小的地图,然后填写地图?

c++ dictionary std

31
推荐指数
2
解决办法
3万
查看次数

在C++ std :: unordered_map中预分配存储区

我正在使用std::unordered_mapfrom gnu ++ 0x来存储大量数据.我想为大量元素预先分配空间,因为我可以限制使用的总空间.

我希望能够做的是致电:

std::unordered_map m;
m.resize(pow(2,x));
Run Code Online (Sandbox Code Playgroud)

其中x是已知的.

std::unordered_map不支持这个.我希望std::unordered_map尽可能使用,因为它最终会成为标准的一部分.

一些其他约束:

需要可靠的O(1)访问和地图的变异.期望的散列和比较函数已经是非标准的并且有些昂贵.O(log n)突变(如同std::map)太昂贵了.

- >昂贵的哈希和比较也使基于摊销的增长方式过于昂贵.每个额外插入都需要来自这些函数的O(n)运算,这导致算法运行时间中的额外二次项,因为指数存储要求需要O(n)增长.

c++ buckets unordered-map

24
推荐指数
2
解决办法
1万
查看次数

如何测量std :: unordered_map的内存使用情况

我们知道基于哈希表的容器实现就像std::unordered_map使用了很多内存但我不知道多少是多少?

除了空间复杂性表示法,并且不考虑容器元素是否是指向更大对象的指针:

有没有办法弄清楚这样的容器在运行时使用了多少字节

有没有办法在运行时告诉任何容器使用多少内存?

c++ unordered-map

15
推荐指数
2
解决办法
1万
查看次数

为什么当我们插入元素时 std::unordered_map 迭代器不会失效(除了发生重新哈希时)?

根据stackoverflowcppreference中描述的迭代器失效规则,我知道除非发生重新哈希,否则迭代器不会对 unordered_map 失效。

如果我使用 std::vector 类比,那么这是否意味着所有插入也发生在迭代器当前指向的位置之前?

我正在修改正在迭代的 unordered_map ,并希望确保不会因迭代器失效而导致任何中断。我至少确保避免使用保留关键字unordered_map Reserve重新哈希

这是我正在编写的示例代码:

// Function to return vector containing the subvector of inputVector with sum desiredSum, this function returns empty vector if sum not found
std::vector<int> sumVectorFunc(const std::vector<int>& inputVector, const int desiredSum){
    std::unordered_map< int,std::vector<int> > sumToSubVector{};
    sumToSubVector.reserve(desiredSum+1);
    // initialization with the zero sum
    sumToSubVector[0] = std::vector<int>{};


    for(auto itVector : inputVector){ // iterate over the vector of elements
        std::unordered_set<int> numbersAddedThisCycle{};    
        for(auto itSubVectors : sumToSubVector){ // iterate …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map c++14

6
推荐指数
1
解决办法
995
查看次数

标签 统计

c++ ×4

unordered-map ×3

buckets ×1

c++14 ×1

dictionary ×1

std ×1