标签: unordered-map

std :: unordered_map和重复键

我正在使用stl unordered_map,我似乎无法使count方法起作用.这是我的计划:

typedef unordered_map<char, int> Mymap;
int main() 
{
    Mymap m;  

    m.insert(Mymap::value_type('a', 1)); 
    m.insert(Mymap::value_type('b', 2)); 
    m.insert(Mymap::value_type('c', 3)); 
    m.insert(Mymap::value_type('b', 4)); 
    m.insert(Mymap::value_type('b', 5)); 

    cout << m.count('b') << endl;

    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

unordered_map的文档说明了unordered_map::count(const Key& k)返回带键的元素数k.所以我希望这里的输出是3,而真正的输出是1.为什么?

c++ stl unordered-map c++11

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

迭代无序的地图C++

我写了一个程序,它读取输入,直到你点击',' - 输入的COMA.然后它计算你输入的字母数,

我想迭代这个地图,但它说it无法定义,没有类型:

#include <iostream>
#include <conio.h>
#include <ctype.h>

#include <iostream>
#include <string>
#include <tr1/unordered_map>
using namespace std;

int main(){
    cout<<"Type '.' when finished typing keys: "<<endl;
    char ch;
    int n = 128;
    std::tr1::unordered_map <char, int> map;


    do{
      ch = _getch();
    cout<<ch;
      if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z'){
            map[ch] = map[ch] + 1;
      }
    } while( ch != '.' );

    cout<<endl;

    for ( auto it = map.begin(); it …
Run Code Online (Sandbox Code Playgroud)

c++ iterator unordered-map

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

带有std :: owner_less-like散列的C++ 11 unordered_set

我正在使用外部网络库,它返回一些代表打开的套接字的魔术结构,文档说当将它们插入STL容器时,应该使用它们进行比较std::owner_less.

std::map<MagicStructure, std::shared_ptr<Client>, std::owner_less<MagicStructure>> sockets;
Run Code Online (Sandbox Code Playgroud)

不过我想unordered_map改用.我该怎么做?std::owner_less是一个比较器,它对哈希映射没用.挖掘源代码,MagicStructure似乎是一个typedef std::shared_ptr.

c++ stl unordered-map shared-ptr c++11

8
推荐指数
1
解决办法
488
查看次数

hash_map/unordered_map的解耦版本

我正在编写一个嵌入式应用程序,不幸的是,我使用的环境目前还没有C++ 11支持.

我需要实现一个哈希/无序映射(std::map由于性能原因,常规方法不会这样做),但似乎无法找到干净利落的方法.

如果没有实际引入整个库,Boost不想工作.甚至hash_map来自SGI 的原始STL也需要多个标头,并重复标准库功能,导致模糊的函数调用.这真是一团糟.

为了便于实现,版本控制,质量控制,V&V等,我真的需要利用现有标准库的东西,并且只存在于几个头文件中,我可以将它放在与所有其他源/头文件相同的文件夹中.这样的事情存在,还是我没有希望?我已经搜索了很长一段时间,但空手而归.

非常感谢您的帮助.如果有必要,我当然可以进一步澄清.

c++ embedded unordered-map hashmap c++-standard-library

7
推荐指数
1
解决办法
256
查看次数

libstdc ++对std :: unordered_map的支持是否不完整?

与CodeReview 上的这个问题相关,我尝试使用std::unordered_map自定义分配器,但显然这不适用于gcc/clang和libstdc ++.可以通过使用a初始化空哈希映射来生成错误std::allocator

#include <unordered_map>

int main()
{
    typedef std::allocator<std::pair<const int, int>> A;
    typedef std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, A> H;    

    auto h = H{A()}; // ERROR, cannot find constructor H::H(const A&)
}
Run Code Online (Sandbox Code Playgroud)

实例.

问题:libstdc ++是否支持std::unordered_map使用单个分配器构造作为参数不完整?

更新:进一步检查表明,对于除了以外的几乎所有容器std::vector,libstdc ++中的分配器的使用直接访问typedef和分配器的成员函数,而不是通过std::allocator_traits.这适用于std::allocator所有自定义分配器但是失败,除非它们直接添加这些成员和typedef.

c++ unordered-map libstdc++ allocator c++11

7
推荐指数
1
解决办法
959
查看次数

将指针散列为C++ STL中unordered_map的键

我张贴了类似的quetion使用在C++ STL地图指针作为键就.当用作Keys时,指针如何在unordered_maps中进行哈希处理.更具体地说,如果我定义:

std::unordered_map< CustomClass*, int > foo;
Run Code Online (Sandbox Code Playgroud)

默认的C++ std :: hash实现是否可以处理这些指针?使用安全吗?这是好习惯吗?

c++ hash stl unordered-map

7
推荐指数
1
解决办法
7626
查看次数

C++将值存储在无序对中

我想存储一对无序整数的浮点值.我无法找到任何易于理解的教程.例如,对于无序对,{i,j}我想存储浮点值f.如何插入,存储和检索这样的值?

c++ arrays unordered-map unordered-set unordered

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

初始化初始化列表中的unordered_map

我正试图找到一个可能是一个非常微不足道的问题的解决方案.我想const unordered_map在类初始化列表中初始化我.但是我还没有找到编译器(GCC 6.2.0)将接受的语法.代码链接在这里.

#include <unordered_map>

class test {
 public:
    test()
      : map_({23, 1345}, {43, -8745}) {}

 private:
   const std::unordered_map<long, long> map_;
 };
Run Code Online (Sandbox Code Playgroud)

错误:

main.cpp: In constructor 'test::test()':
main.cpp:6:36: error: no matching function for call to 'std::unordered_map<long int, long int>::unordered_map(<brace-enclosed initializer list>, <brace-enclosed initializer list>)'
  : map_({23, 1345}, {43, -8745}) {}
                                ^
Run Code Online (Sandbox Code Playgroud)

复制常量是否不允许在初始化列表中初始化?或者语法必须不同?

c++ unordered-map initialization c++11 c++14

7
推荐指数
1
解决办法
7921
查看次数

`std :: unordered_map`没有复制关键数据

我有一个Person类,它有一个nameproperty(std::string).

我想创建一个查找表,一个std::unordered_map,所以我可以找到一个Person名字.但是,鉴于a Person,我也希望能够得到他们的名字.

这需要存储name两次 - 一次作为地图的键,一次存储在人物对象内,如下面的代码所示.

由于我有很多Persons一次加载到内存中,我不希望两次存储它们的名称的开销.

我已经尝试在Person类中使用键的引用/指针,但这会产生问题,因为映射似乎在修改时重新调整其数据,并且引用变为无效.

我也尝试过使用std::unordered_set,但这意味着我Person每次想要执行查找时都需要构造一个完整的对象.

是否有任何方法可以使无序映射的键和值共享相同的数据?

#include <iostream>
#include <unordered_map>


class Person
{
    private:
        const std::string _name;

    public:
        Person( const std::string& name ) : _name( name )
        {
        }


        const std::string& get_name() const
        {
            return _name;
        }
};


int main()
{
    auto my_set = std::unordered_map<std::string, std::shared_ptr<Person>>();

    my_set.insert( { "alice", std::shared_ptr<Person>( new Person( "alice" )) } …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map stdmap c++11

7
推荐指数
1
解决办法
658
查看次数

std::unordered_map::reserve 是否保证只要映射中的元素较少就不会发生内存分配?

如果我将 std::unordered_map::reserve 与参数 n 一起使用,只要插入到映射中的元素少于 n 个,插入到映射中是否能保证不会导致堆分配?

c++ memory unordered-map std language-lawyer

7
推荐指数
1
解决办法
147
查看次数