我正在尝试从我的 map 上最大的键中检索值,将该值作为一个 vector ,并尝试将该值保存到一个新的 vector 中。映射键是 double 的,值是 vector 。
这是我的 map :
map <double, vector<long>> correlationValues1;
我想获取具有最高键的值(假设映射键按升序排序):
vector<long> finalDirections1 = (correlationValues1.end())->second;
编译时出现错误:
Error C2664 'std::pair<const _Kty,_Ty>::pair(std::pair<const _Kty,_Ty> &&)': el argumento 2 no puede convertirse de 'std::vector<double,std::allocator<_Ty>>' a 'const std::vector<long,std::allocator<_Ty>> &' TDI c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.12.25827\include\xmemory0 945
帮助任何人?
附言: 抱歉我的英语不好。
附言: 感谢所有小伙伴的支持!! 它仍然提供编译错误... @那个男孩,我试过你的方法但还是不行......
我不知道这是否真的有影响,但是当我将键和值放入 map 时,我使用 .emplace():
vector<double> arr1;
arr1.push_back(temp1.FirstRow());
arr1.push_back(temp1.LastRow());
arr1.push_back(temp1.FirstCol());
arr1.push_back(temp1.LastCol());
vector<double> arr2;
arr1.push_back(temp2.FirstRow());
arr1.push_back(temp2.LastRow());
arr1.push_back(temp2.FirstCol());
arr1.push_back(temp2.LastCol());
correlationValues1.emplace(correlation, arr1);
correlationValues2.emplace(correlation, arr2);
我不知道为什么会这样......
最佳答案
首先,map.end()不是有效的迭代器,map的数据是:
[ map.begin(), map.end() ). It means that iterator < end() and iterator >= begin().
如果你想访问 map 中的最后一个元素,你可以使用
map.rbegin()
或
--map.end()
// Example program
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main()
{
vector<long> v1 = {10,2,3};
vector<long> v2 = {20,3,4};
map <double, vector<long>> correlationValues1;
correlationValues1.insert(pair<double, vector<long>>(10.0, v1));
correlationValues1.insert(pair<double, vector<long>>(5.0, v2));
vector<long> finalDirections1 = (correlationValues1.rbegin())->second;
}
关于c++ - 从 map 中检索值的问题(该值是一个 vector ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55708653/