我对STL很新。如果问题是天真的话,请原谅我。
我有一对像这样用作地图的关键字。
typedef pair <int, int> KeyPair;
我的地图如下所示
typedef map <KeyPair, uint32> NvInfoMap;
现在我想在地图的Key部分引入一个新整数。
哪种方法最简单?
我是否必须制作另一对将现有配对作为其后半部分?
请注意,我处于受限制的环境中,无法使用升级库。
感谢您的时间。
答案 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>>;
的优点是它为您定义了必要的比较运算符,但创建一个并访问其元素的缺点是有点不对。