标签: unordered-map

擦除std :: tr1 :: unordered_map中的元素

我们可以使用前向迭代来擦除unordered_map中的元素吗?

unordered_map<string, int> employeeTable;
unordered_map<string, int>::iterator it;

for (it = employeeTable.begin(); it != employeeTable.end();) {
   int age = it->second;
   if (age < 18) {
      employeeTable.erase(it++);
   } else {
      ++it;
   }
}
Run Code Online (Sandbox Code Playgroud)

如果以上不正确,标准推荐什么?像下面的东西

it = employeeTable.erase(it);
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map

3
推荐指数
1
解决办法
2446
查看次数

使用Boost unordered_map

我希望boost::unordered_map在没有下载整个Boost包的情况下包含在我的项目中.我怎样才能做到这一点?

c++ boost unordered-map

3
推荐指数
1
解决办法
622
查看次数

STL unordered_map的序列化

我有一个程序,它使用带有此定义的无序映射:

unordered_map<const char*, vector<pair<int, int> >, function<unsigned int (const char *str)> > myMap(30000, hashing);
Run Code Online (Sandbox Code Playgroud)

其中散列是一个用于散列键的函数.我的问题是 - >如何序列化这种结构并在之后反序列化?我真的需要它,并尽可能快速有效.我一直在阅读有关boost库的内容,但我不太了解如何将它们与这种东西一起使用.我知道有一些无序地图的升级库,但是,显然我做错了,编译器会抛出很多错误.有人可以给我一个示例代码,如何序列化这个?谢谢.

c++ serialization boost unordered-map

3
推荐指数
1
解决办法
3819
查看次数

带有void(*)()的Unordered_map插入值无法正常工作

我正在使用这个无序的地图:

typedef unordered_map <char, void (*)()> Keymap;
Keymap keys;
Run Code Online (Sandbox Code Playgroud)

并尝试填写:

void assign(char key, void (*value)())
{
    if (keys[key] == NULL)
        keys.insert(Keymap::value_type(key, value));
    else
        keys[key] = value;
}
Run Code Online (Sandbox Code Playgroud)

指示:

keys.insert(Keymap::value_type(key, value));
Run Code Online (Sandbox Code Playgroud)

将char插入键中但值未初始化(NULL),因此我有一个带有('s',NULL)的映射而不是('s',function_pointer).

指令键[key] = value; 工作正常.

错误在哪里?

c++ unordered-map void-pointers visual-c++

3
推荐指数
1
解决办法
956
查看次数

使用unordered_multimap

所以,伙计们,我std::unordered multimap只是为了好玩而玩.我想存储(在这个例子中)unsigned shorts,使用自定义哈希并且相等.

有趣的是什么?如果它们是偶数或奇数,则两个项目相等.

所以,据我所知,我不能使用std::unordered_map,即使实际值不同:自定义谓词另有说法.(如果我错了,请纠正我,显然!)

所以回顾一下:我存储不同的整数,因此存储不同的哈希值,但它们在谓词下的值可能是相同的.

#include <iostream>
#include <unordered_map>

class tt
{
public:

    tt(const unsigned short v = 0) : i(v) { };

    unsigned short i;
};

class tt_hash
{
public:
    size_t operator()(const tt &v) const
    {
        auto f = std::hash<unsigned short>();
        return f(v.i);
    };
};

class tt_equal
{
public:
    bool operator()(const tt &u, const tt &v) const
    {
        return (u.i % 2) == (v.i % …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map hashmap c++11

3
推荐指数
1
解决办法
1515
查看次数

Unordered_Map查找时间

C++库中的内置映射和集合(包括unordered_map和multimap)要求find函数(用于查找特定元素)使用迭代器来遍历元素.C++参考站点声称使用这些数据结构查找元素平均需要时间,就像常规哈希表一样.但是,迭代器是否必须遍历整个列表,在找到元素之前平均得到这个O(n)时间?

performance unordered-map hashtable hashmap multimap

3
推荐指数
1
解决办法
5210
查看次数

对于C++ unordered_map,如果它是新的,我如何添加键值对,如果它的键已经存在,则将一个函数应用于该值?

鉴于:

unordered_map<string, float> my_map
Run Code Online (Sandbox Code Playgroud)

还有一对:

auto my_pair = make_pair("some_key", some_float);
Run Code Online (Sandbox Code Playgroud)

如果some_key不存在,如何有效地将对插入到地图中,
如果some_key存在,则自动添加some_float到密钥的现有值?

我目前的解决方案(或缺乏它,肯定有更优雅的方式):

auto added = my_map.emplace(my_pair); 
if(!added.second) { // my_key already has an associated value
    auto &curr_value = *my_map.first; // pointer to the existing pair
    curr_value.second += my_pair.second; // add some_float
}
Run Code Online (Sandbox Code Playgroud)

c++ stl unordered-map c++11

3
推荐指数
1
解决办法
1959
查看次数

使用`std :: pair`值进入`std :: unordered_map`

我正试图将值放入std::unordered地图中,如下所示:

std::unordered_map<std::string, std::pair<std::string, std::string>> testmap;
testmap.emplace("a", "b", "c"));
Run Code Online (Sandbox Code Playgroud)

这是行不通的,原因是:

错误C2661:'std :: pair :: pair':没有重载函数需要3个参数

我已经看过这个答案这个答案了,似乎我需要融入std::piecewise_construct进驻才能让它发挥作用,但我不认为我完全知道在这种情况下把它放在哪里.尝试像

testmap.emplace(std::piecewise_construct, "a", std::piecewise_construct, "b", "c"); // fails
testmap.emplace(std::piecewise_construct, "a", "b", "c"); // fails
testmap.emplace(std::piecewise_construct, "a", std::pair<std::string, std::string>( std::piecewise_construct, "b", "c")); // fails
Run Code Online (Sandbox Code Playgroud)

有什么方法可以得到这些值emplace吗?

我正在编译msvc2013,以防万一.

c++ unordered-map c++11 std-pair

3
推荐指数
1
解决办法
849
查看次数

std :: unordered_map如何存储和比较其键以实现对元素的快速访问而无需排序?

据我所知,std :: unordered_map用于快速访问元素。这是通过存储和比较密钥哈希而不是密钥本身来实现的。同样,无序意味着其中的元素未排序。但是要快速访问元素,需要对项目进行排序,以便能够使用二进制搜索找到请求的项目。

  • 这是否意味着unordered_map中的项目是根据其哈希键进行排序的,而导致unordered_map比映射到访问元素的映射更快的唯一原因是比较哈希值通常比比较键值要快得多?
  • 如果是这样,则在unordered_map和map之间进行选择取决于键的类型。我对吗?
  • 最后一个问题是为什么unordered_map不能像地图一样获得Compare模板参数?unordered_map如何仅通过相等的运算符比较键哈希?

    template <class Key,
              class T,
              class Compare = less<Key>,
              class Alloc = allocator<pair<const Key,T> >
              > class map;
    
    template <class Key,
              class T,
              class Hash = hash<Key>,
              class Pred = equal_to<Key>,
              class Alloc = allocator< pair<const Key,T> >
              > class unordered_map;
    
    Run Code Online (Sandbox Code Playgroud)

c++ hash dictionary unordered-map

3
推荐指数
1
解决办法
757
查看次数

std :: unordered_set :: load_factor,为什么浮动而不是double?

据我所知,之间最快的一类float,并double依赖于本机ALU执行,通常是基于双精度。在基于逆向精度进行计算时,ALU必须始终执行相应的精度转换。

那么,为什么选择float代表该标准的标准load_factor呢?我想这是为了节省哈希表容器上的内存,但我想知道是否有更充分的理由。

c++ unordered-map unordered-set

3
推荐指数
1
解决办法
54
查看次数