我有像
这样的数据**"London","Paris" -> 10
"New York","Japan" -> 100
"London","Japan" -> 200**
..
如何使用STL保存货币对?由于Map只允许键和值,而不是额外的键。
我可以使用额外的对象保存密钥,该对象将保存2个值。
map < string, Object>
但是我必须经历一个额外的步骤来解析对象,这将是一个开销。
即使我可以使用链表来完成我的工作。但是有没有其他有效的方法来保存和访问它?或者我正在思考正确的方向?我是STL的新手。
答案 0 :(得分:4)
您可以使用std::map
(如M. M.所述)或std::unordered_map
std::pair<std::string, std::string>
来int
s。
std::map
很简单 - 只需使用std::map<std::pair<std::string, std::string>, int>
即可。标准库已经知道如何比较对。
但是,如果您不需要订购,那么使用基于哈希的字典可能会更好。借用this question,首先定义:
struct pairhash {
public:
template <typename T, typename U>
std::size_t operator()(const std::pair<T, U> &x) const
{
return std::hash<T>()(x.first) ^ std::hash<U>()(x.second);
}
};
(请参阅Tony D的评论,以获得更好的版本。)
现在您可以使用std::unordered_map<std::pair<std::string, std::string>, int, pairhash>
。
请务必同时包含相应的标头(例如,<map>
和<unordered_map>
)。对于无序版本,您还应确保使用c ++ 11设置进行构建。