2

我只是想知道制作一个像这样的数据结构是否是个好主意

std::map< std::pair<int,int>,std::string >

只是想知道如何在内部订购这些对......:S

谢谢!

4

3 回答 3

9

将使用对operator<(默认比较操作std::map)对这些对进行排序,其中

回报:x.first < y.first || (!(y.first < x.first) && x.second < y.second)

(C++03, 20.2.2/6)

请注意,使用一对作为映射键可能会让人感到困惑,尤其是在使用映射迭代器时(it->first.first获取键对的第一个元素看起来很荒谬)。但在某些情况下,这可能比为密钥创建一个全新的结构更容易。

与所有事物一样,请谨慎使用,如果它不是直截了当且易于理解,那么最好找到一种不同的方法来完成它。

于 2010-04-23T01:29:51.740 回答
1

你可以。在我看来,尽管您应该做一些比这更具表现力的事情,因为std::pair这不是为此而生的。例如,如果您想通过哈希将字符串存储在地图中,那么您可以执行以下操作:

struct Hash {
    int hash_low;
    int hash_high;

    bool operator<(const Hash& other) const;
};

然后使用map<Hash,string>而不是map<pair<int,int>,string>.

于 2010-04-23T01:29:12.990 回答
1

如果您希望哈希表有两个索引,那么您应该查看Boost::multiindex容器。

至于回答你的问题,如果你能处理其他人指出的限制,为什么不呢?我始终支持任何清晰、易于使用且适合手头问题目的的解决方案。

于 2010-04-23T01:31:25.377 回答