相关疑难解决方法(0)

如何通过多个键索引和查询STL映射容器?

我遇到了一个记录存储为的要求

Name :  Employee_Id  :  Address
Run Code Online (Sandbox Code Playgroud)

其中Name和Employee_Id应该是键,在Name和Employee Id上都提供搜索功能.

我可以考虑使用地图来存储这个结构

std::map< std:pair<std::string,std::string> , std::string >  
//      <         < Name   ,   Employee-Id> , Address     > 
Run Code Online (Sandbox Code Playgroud)

但我不确定搜索功能的样子.

c++ containers stl

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

如何创建一个C++映射容器,其中键是值的一部分?

我想存储一堆键值对象,但值对象本身(及其对它的引用)知道它的键.我还想在只给出密钥的情况下有效地查找这些对象.

class SomeObject
{
private:
    //String or integer. int seem cheap enough to duplicate with std::map, but
    //strings seem pretty expensive when there may be thousands of objects in existence.
    //Reference/Pointer to key is fine
    const SomeOtherObject key;
    ...other stuff...
public:
    ...methods, some of which use the key in some way...
};
Run Code Online (Sandbox Code Playgroud)
  • 的std ::地图
    • 似乎要求存储是std :: pair,这样值就无法访问密钥.如果值包含密钥,则需要重复该密钥.
    • 实际上并不强制执行值内部的键不会以某种方式更改
  • 的std ::设为
    • 看起来是一个非常好的解决方案,使用自定义比较方法按键提供唯一性,直到您意识到它使您的整个值成为常量,而不仅仅是关键字段.
  • std :: vector(或其他数组/列表之类的解决方案)
    • 可以使用线性搜索,或者如果项目保持排序二进制搜索.但是我怀疑这在性能方面并不是最优的,并且需要额外的某种层才能真正实现所需的行为.

c++ containers dictionary stl

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

没有Boost的现代C++中的bimap实现

我承认这个问题在之前已经被问到,但是现在是4年前,我敢于要求更新:

我需要一种方法来将一个元组/对添加到容器中并有效地搜索左侧和右侧元素.

升压具有bimapmulti_index该做的正是我想要的,但我不知道什么是纯现代C++推荐的替代方案- 11/14如果你不希望引入的依赖性提高(无论何种原因).

链接中的一个答案表明不需要s.th. 由于透明的比较器,更像是一个bimap .接受的答案表明将std::maps与key1- > key2key2- > 组合在一起的实现key1.

我真的不知道透明比较器如何帮助我,我只是好奇是否有一些这是你应该怎么做以及为什么 - 解决方案.你能提供一些提示/链接吗?

c++ boost bimap c++11 c++14

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

标签 统计

c++ ×3

containers ×2

stl ×2

bimap ×1

boost ×1

c++11 ×1

c++14 ×1

dictionary ×1