使用3个组件指定STL Map键

时间:2013-12-19 11:48:04

标签: c++ stl

我对STL很新。如果问题是天真的话,请原谅我。

我有一对像这样用作地图的关键字。

typedef pair <int, int> KeyPair;

我的地图如下所示

typedef map <KeyPair, uint32> NvInfoMap;

现在我想在地图的Key部分引入一个新整数。

哪种方法最简单?

我是否必须制作另一对将现有配对作为其后半部分?

请注意,我处于受限制的环境中,无法使用升级库。

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

如果你的限制允许C ++ 11,那么

typedef std::tuple<int, int, int> KeyTriple;

否则,您可以定义自己的类型

struct KeyTriple {
    int a;
    int b;
    int c;
};

有一个允许它用作键的顺序

bool operator<(KeyTriple const & lhs, KeyTriple const & rhs) {
    if (lhs.a < rhs.a) return true;
    if (rhs.a < lhs.a) return false;
    if (lhs.b < rhs.b) return true;
    if (rhs.b < lhs.b) return false;
    if (lhs.c < rhs.c) return true;
    return false;

    // Alternatively, if you can use C++11 but don't want a tuple for a key
    return std::tie(lhs.a, lhs.b, lhs.c) < std::tie(rhs.a, rhs.b, rhs.c);
}

或者,如您所知,您可以使用嵌套对

typedef std::pair<int, std::pair<int, int>>;

的优点是它为您定义了必要的比较运算符,但创建一个并访问其元素的缺点是有点不对。