标签: unordered-map

其他字符串的索引字符串

我需要用其他字符串索引特定的字符串,我真的找不到一个好方法.我试图使用tr1 :: unordered_map,但我在使用它时遇到了一些困难.如果有人能告诉我最好的方法是什么,我真的很感激:)我还需要用数字索引对象(数字不按顺序,所以我不能使用向量)

c++ string indexing unordered-map tr1

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

我的静态地图总是空的

我在头文件中声明了一个静态无序映射,如下所示:

static boost::unordered_map<KeyAction, sf::Key::Code> WindowKeyMap;
Run Code Online (Sandbox Code Playgroud)

在同一个头文件中,我有一个用一些值填充地图的函数:

static void Initialize(std::string &file)
{
    WindowKeyMap[MoveLeft] = sf::Key::Code::Left;
    WindowKeyMap[MoveRight] = sf::Key::Code::Right;
    WindowKeyMap[MoveUp] = sf::Key::Code::Up;
    WindowKeyMap[MoveDown] = sf::Key::Code::Down;
    std::cout << std::endl << WindowKeyMap.size() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

稍后在我的程序中,在一个单独的类/函数中,我尝试读取其中一个值:

std::cout << std::endl << WindowKeyMap.size() << std::endl;
auto test2 = WindowKeyMap[MoveRight];
Run Code Online (Sandbox Code Playgroud)

但地图总是空的.控制台的输出始终是初始化例程的4,然后是第二个cout的0.我认为静态地图在程序中是持久的,所以我对我的静态地图如何空洞感到有些困惑.任何人都能解释一下吗?

谢谢

c++ unordered-map c++11

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

为什么std :: tr1 :: unordered_map比自己开发的哈希映射慢?

我写了一个基本程序,它接受字符串并通过将它们插入到字符串 - >整数哈希映射中来计算唯一字符串的发生率.

我使用std :: tr1 :: unordered_map作为存储,模板化自定义散列函数和自定义相等函数.关键类型实际上char*而不是太慢std::string.

然后我改变了相同的代码,使用一个非常非常简单的哈希表(实际上是由哈希索引的{key,value}结构数组),具有2的幂大小和线性探测冲突.该计划的速度提高了33%.

鉴于当我使用tr1 :: unordered_map时,我预先设定了哈希表,因此它永远不会增长,并且我使用的是完全相同的哈希和比较例程,tr1 :: unordered_map的做法使得它减慢了50%.与可以想象的最基本的哈希映射相比?

哈希映射类型的代码我在这里称之为"简单":

typedef struct dataitem {
    char* item;
    size_t count;
} dataitem_t;

dataitem_t hashtable[HASHTABLE_SIZE] = {{NULL,0}}; // Start off with empty table

void insert(char* item) {
    size_t hash = generate_hash(item);
    size_t firsthash = hash;
    while (true) {
        hash &= HASHTABLE_SIZE_MASK; // Bitmasking effect is hash %= HASHTABLE_SIZE
        if (hashtable[hash].item == NULL) { // Free bucket
            hashtable[hash].item = item;
            hashtable[hash].count = 1;
            break;
        } …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map hashmap

2
推荐指数
2
解决办法
3525
查看次数

std :: tr1 :: unordered_map中的C++相等

有没有理由说std :: tr1 :: unordered_map省略了为std :: map存在的相等(==)运算符?

实现这个的好方法是什么?我正在考虑创建两组unordered_map :: value_type,从两个hash_maps初始化它们,然后检查两个set的相等性.

c++ unordered-map equality

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

包含unordered_map作为成员的结构的sizeof()

我有一个以下类型的结构

struct Node
    {
        int  word;       
        int   count;       
        unordered_map<Type, Node*> map;       

    }node;   
Run Code Online (Sandbox Code Playgroud)

假设sizeof(node)在C++中为您提供正确的节点大小,这是否安全?我确信结构中会有填充,但sizeof仍会考虑unordered_map的正确大小.

c++ unordered-map structure sizeof

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

是否建议不要将大型STL对象存储为std :: unordered_map作为值?

例如,请考虑以下trie实现.

struct Trie: unordered_map<char, pair<bool, Trie> >
Run Code Online (Sandbox Code Playgroud)

是否应该struct Trie存储指针?

struct Trie: unordered_map<char, pair<bool, Trie *> >
Run Code Online (Sandbox Code Playgroud)

由于struct Trie对象可能变得非常大,因此随着trie变大,第一次实现效率会降低吗?

在这里,管理内部内存alloc和dealloc Trie应该不会太麻烦,所以不考虑手动的麻烦,new / delete应该首选哪种实现?

c++ stl unordered-map hashtable trie

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

如何在unordered_map中存储2个以上的变量?

如何在一个std::unordered_map?中存储2个以上的变量?

我想要这样的东西:

std::unordered_map<string, int, int, int> mapss = {{"a",1,1,1},{"b",1,2,3}};
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map

2
推荐指数
2
解决办法
1011
查看次数

调用"insert"std :: unordered_map没有匹配的成员函数

我试图哈希string到一个pointer to a void function which takes in a string.尝试将键值对插入映射时出现以下错误:

"没有匹配的成员函数来调用"插入"

我不知道如何解释这个错误.

我想我要么输入错误的类型进行插入,函数引用不正确,要么输入错误的函数指针.

#include <string>
#include <unordered_map>
using namespace std;

void some_function(string arg)
{
  //some code
}

int main(int argc, const char * argv[]) {


    typedef void (*SwitchFunction)(string);
    unordered_map<string, SwitchFunction> switch_map;

    //trouble with this line
    switch_map.insert("example arg", &some_function); 
}   
Run Code Online (Sandbox Code Playgroud)

任何意见,将不胜感激.

c++ unordered-map typedef c++11

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

std :: move(key)迭代unordered_map <string,string>?

以下是安全的吗?

unordered_map<string, string> my_map;
unordered_map<string, double> new_map;
for(auto&& [key, value] : my_map) {
    new_map.insert({std::move(key), std::stod(value)});
}
Run Code Online (Sandbox Code Playgroud)

我没有my_map在循环之后使用,是否可以从key迭代中移动它?

c++ unordered-map c++11

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

如何在C ++中单独锁定unordered_map元素

我有一个unordered_map我希望可以被多个线程访问的方法,但是用互斥锁锁定整个过程太慢了。

为了解决这个问题,我在的每个元素中放置了一个互斥锁unordered_map

class exampleClass{
    std::mutex m;
    int data;
};

std::unordered_map<int,exampleClass> exampleMap;
Run Code Online (Sandbox Code Playgroud)

问题是我无法安全地擦除元素,因为要破坏互斥锁必须将其解锁,但是如果解锁,则另一个线程可以将其锁定并在破坏期间写入或读取该元素。

c++ multithreading mutex unordered-map

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