Java C++;
我有一个应用程序(在C++中),其中我需要字符串和整数之间有一组配对,即:Java C++;,java,c++,hashmap,unordered-map,Java,C++,Hashmap,Unordered Map,我有一个应用程序(在C++中),其中我需要字符串和整数之间有一组配对,即: ("david", 0) ("james", 1) ("helen", 2) ... 如果我们使用java(键,值)定义,我需要能够(1)搜索以查看映射中是否存在键,(2)检索与给定字符串(键)关联的值。在java中工作时,我发现HashMap类型可以处理我需要的一切 我想做同样的事情,但是在C++中。我做了一些谷歌搜索,发现在C++ 2011库中有一个无序的映射类型来复制这个。 我很好奇这是否是最好的办法 在我的应
("david", 0)
("james", 1)
("helen", 2)
...
如果我们使用java(键,值)定义,我需要能够(1)搜索以查看映射中是否存在键,(2)检索与给定字符串(键)关联的值。在java中工作时,我发现HashMap类型可以处理我需要的一切
我想做同样的事情,但是在C++中。我做了一些谷歌搜索,发现在C++ 2011库中有一个无序的映射类型来复制这个。
我很好奇这是否是最好的办法
在我的应用程序中,我对集合有以下规则
我理解这是一个普遍的问题,存在许多不同的方法。我将编写一些不同的想法,但我认为最好先让小组成员看看你们的想法 您可以使用
unordered_-map
简单的答案当然是std::unordered_-map
。但是,为了获得更多功能和自动索引一致性,我们可以使用boost::multi_index_container
例如:
namespace bmi = boost::multi_index;
// Define a custom container type
using my_map = boost::multi_index_container<
// It holds StringValue objects
StringValue,
bmi::indexed_by<
// first index is called by_string, is a unique hashed index with constant time lookuo
bmi::hashed_unique<bmi::tag<by_string>, bmi::member<StringValue, std::string, &StringValue::str>>,
// second index is called by_value, is a unique hashed index with constant time lookup
bmi::hashed_unique<bmi::tag<by_value>, bmi::member<StringValue, int, &StringValue::value>>,
// second index is called ordered_by_value, is a unique ordered index with logarithmic time lookup
bmi::ordered_unique<bmi::tag<ordered_by_value>, bmi::member<StringValue, int, &StringValue::value>>
>
>;
预期产出:
print by value index:
[ { "str": "B", "value": 3 }, { "str": "D", "value": 1 }, { "str": "A", "value": 4 }, { "str": "C", "value": 2 } ]
print by value index unordered:
[ { "str": "B", "value": 3 }, { "str": "D", "value": 1 }, { "str": "A", "value": 4 }, { "str": "C", "value": 2 } ]
print by value index ordered:
[ { "str": "D", "value": 1 }, { "str": "C", "value": 2 }, { "str": "B", "value": 3 }, { "str": "A", "value": 4 } ]
find an element by value in constant time:
C
文件:
根据要存储的数据量,有两种可能:
- 对于半大数据量,我认为一个
就可以了std::unordered_map
- 如果您想处理大量数据,那么考虑使用更专用的字符串存储数据结构可能会有所帮助,例如,trys,其中带有公共前缀的字符串存储在公共子树中。这还可以提高空间利用率,因为数据会被压缩。据我所知,最有效的实现是python pytries包中也使用的
print by value index:
[ { "str": "B", "value": 3 }, { "str": "D", "value": 1 }, { "str": "A", "value": 4 }, { "str": "C", "value": 2 } ]
print by value index unordered:
[ { "str": "B", "value": 3 }, { "str": "D", "value": 1 }, { "str": "A", "value": 4 }, { "str": "C", "value": 2 } ]
print by value index ordered:
[ { "str": "D", "value": 1 }, { "str": "C", "value": 2 }, { "str": "B", "value": 3 }, { "str": "A", "value": 4 } ]
find an element by value in constant time:
C