Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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++ 如何根据c+中的另一个映射对映射进行排序+;?_C++_Sorting_Map - Fatal编程技术网

C++ 如何根据c+中的另一个映射对映射进行排序+;?

C++ 如何根据c+中的另一个映射对映射进行排序+;?,c++,sorting,map,C++,Sorting,Map,我有两张地图: map< T t, int v> map1; map< T t, int v> map2; mapmap1; mapmap2; 如何根据map1的值对map2进行排序?(或将结果保存到向量?) 有没有简单的方法可以实现这一点?您无法对std::map进行排序。地图始终按键的排序顺序保存。这是数据结构的一个基本不变量,您无法改变它。您最好将地图复制到另一个容器中,然后重新排列该容器,例如: std::vector<std::pair<T, i

我有两张地图:

map< T t, int v> map1;
map< T t, int v> map2;
mapmap1;
mapmap2;
如何根据map1的值对map2进行排序?(或将结果保存到向量?)
有没有简单的方法可以实现这一点?

您无法对
std::map
进行排序。地图始终按键的排序顺序保存。这是数据结构的一个基本不变量,您无法改变它。您最好将地图复制到另一个容器中,然后重新排列该容器,例如:

std::vector<std::pair<T, int>> v(map1.begin(), map1.end());
std::vector v(map1.begin(),map1.end());
您无法对
std::map
进行排序。地图始终按键的排序顺序保存。这是数据结构的一个基本不变量,您无法改变它。您最好将地图复制到另一个容器中,然后重新排列该容器,例如:

std::vector<std::pair<T, int>> v(map1.begin(), map1.end());
std::vector v(map1.begin(),map1.end());
正如Kerrek所说,您可以简单地从映射的
开始
结束
迭代器构造一个
std::vector
,但这也将为您提供键和值。您可以使用
std::transform
仅获取以下值:

std::map<int, int> m = { {1,-1}, {2,-2} };
std::vector<int> v; v.reserve(m.size());
std::transform(m.begin(), m.end(), std::back_inserter(v), 
               [](const std::pair<const int, int>& p)
               { return p.second; });
// or
std::transform(m.begin(), m.end(), std::back_inserter(v), 
               std::bind(&std::pair<const int, int>::second, std::placeholders::_1));
std::map m={{{1,-1},{2,-2};
std::向量v;v、 储备量(m.size());
std::transform(m.begin()、m.end()、std::back_插入器(v),
[](常数标准::对和对)
{返回p.second;});
//或
std::transform(m.begin()、m.end()、std::back_插入器(v),
std::bind(&std::pair::second,std::占位符::\u 1));

正如Kerrek所说,您可以简单地从映射的
开始
结束
迭代器构造一个
std::vector
,但这也将为您提供键和值。您可以使用
std::transform
仅获取以下值:

std::map<int, int> m = { {1,-1}, {2,-2} };
std::vector<int> v; v.reserve(m.size());
std::transform(m.begin(), m.end(), std::back_inserter(v), 
               [](const std::pair<const int, int>& p)
               { return p.second; });
// or
std::transform(m.begin(), m.end(), std::back_inserter(v), 
               std::bind(&std::pair<const int, int>::second, std::placeholders::_1));
std::map m={{{1,-1},{2,-2};
std::向量v;v、 储备量(m.size());
std::transform(m.begin()、m.end()、std::back_插入器(v),
[](常数标准::对和对)
{返回p.second;});
//或
std::transform(m.begin()、m.end()、std::back_插入器(v),
std::bind(&std::pair::second,std::占位符::\u 1));

也许您可以举一个小例子,说明在这种情况下您希望采用什么行为?这是一个非常宽泛的术语。也许你可以举一个小例子,说明在这种情况下你希望有什么样的行为?这是一个非常广泛的术语。谢谢,有人告诉我定义一个结构,将Value1和Value2与key组合,然后使用向量对结构进行排序。谢谢,有人告诉我定义一个结构,将Value1和Value2与key组合,然后使用向量对结构进行排序。