Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用3个组件指定STL映射键_C++_Stl - Fatal编程技术网

C++ 使用3个组件指定STL映射键

C++ 使用3个组件指定STL映射键,c++,stl,C++,Stl,我是STL的新手。如果这个问题很幼稚,请原谅我 我有一对像这样的,用来作为地图的钥匙 typedef对密钥对 我的地图如下图所示 typedef-map-NvInfoMap 现在我想在地图的关键部分引入一个新的整数。 哪种方法最简单 我是否必须制作另一对,将现有的一对作为其后半部分 请注意,我在一个受限制的环境中,boost库不可用 谢谢您的时间。如果您的限制允许使用C++11,那么 typedef std::tuple<int, int, int> KeyTriple; 具有允许

我是STL的新手。如果这个问题很幼稚,请原谅我

我有一对像这样的,用来作为地图的钥匙

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>>;