Проблема с получением значения с карты (значение является вектором) - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь извлечь значение из самого большого ключа на моей карте, являющегося значением вектора, а также пытаюсь сохранить это значение в новом векторе. Ключи карты двойные, а значения - векторы.

Это моя карта:

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 

Помогите кому-нибудь?

P.S: Извините за мой плохой английский.

P.P.S: Спасибо за поддержку, ребята! Это все еще доставляет ту ошибку компиляции ... @ Мальчик, я попробовал твой метод, но все еще не работает ...

Я не знаю, действительно ли это влияет, но когда я помещаю ключи и значения в карту, я использую .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);

Понятия не имею, почему это происходит ...

1 Ответ

2 голосов
/ 16 апреля 2019

во-первых, map.end () не является действительным итератором, данные карты:

[map.begin (), map.end ()). Это означает, что iterator = begin ().

если вы хотите получить доступ к последнему элементу на карте, вы можете использовать

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