C++ 使用3个组件指定STL映射键
我是STL的新手。如果这个问题很幼稚,请原谅我 我有一对像这样的,用来作为地图的钥匙C++ 使用3个组件指定STL映射键,c++,stl,C++,Stl,我是STL的新手。如果这个问题很幼稚,请原谅我 我有一对像这样的,用来作为地图的钥匙 typedef对密钥对 我的地图如下图所示 typedef-map-NvInfoMap 现在我想在地图的关键部分引入一个新的整数。 哪种方法最简单 我是否必须制作另一对,将现有的一对作为其后半部分 请注意,我在一个受限制的环境中,boost库不可用 谢谢您的时间。如果您的限制允许使用C++11,那么 typedef std::tuple<int, int, int> KeyTriple; 具有允许
typedef对密钥对代码>
我的地图如下图所示
typedef-map-NvInfoMap代码>
现在我想在地图的关键部分引入一个新的整数。
哪种方法最简单
我是否必须制作另一对,将现有的一对作为其后半部分
请注意,我在一个受限制的环境中,boost库不可用
谢谢您的时间。如果您的限制允许使用C++11,那么
typedef std::tuple<int, int, int> KeyTriple;
具有允许将其用作密钥的命令
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);
}
bool运算符考虑使用a而不是对<代码>类型定义元组键类型代码>@SeanCline:不支持元组。决定使用嵌套对。谢谢。老实说,我不知道我是否可以使用C++ 11。我现在检查一下。这是用于基于MIPS的嵌入式目标。该operator@SeanCline:这需要C++11,在这种情况下,您可能会使用tuple
。(我想你可以嵌入一个数组而不是三个变量,如果你想避免编写这种有点容易出错的代码的话,可以使用lexicographical\u-compare
。@MikeSeymour,支持TR1
的编译器非常常见。我忘了这是新标准。
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>>;