哪个datastructure或stl用于保存具有值的对?

时间:2016-04-18 06:33:43

标签: c++ stl

我有像

这样的数据
**"London","Paris" -> 10
"New York","Japan" -> 100
"London","Japan" -> 200**
..

如何使用STL保存货币对?由于Map只允许键和值,而不是额外的键。

我可以使用额外的对象保存密钥,该对象将保存2个值。

 map < string, Object>

但是我必须经历一个额外的步骤来解析对象,这将是一个开销。

即使我可以使用链表来完成我的工作。但是有没有其他有效的方法来保存和访问它?或者我正在思考正确的方向?我是STL的新手。

1 个答案:

答案 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设置进行构建。