2016-08-03 6 views
-5

У меня есть карта вектораC++ получить вектор из карты векторов

map< int, vector<float> > hit = getAlignedHits(); 

Я хочу, чтобы получить вектор в паре с определенным ключом, такие как:

vector<float> vec; 
vec = hit[1]; 

Погрешность I получаете:

candidate function not viable: no known conversion from vector<float, allocator<float>> to const vector<double, allocator<double>> for 1st argument vector& operator=(const vector& __x);

Я попытался ниже, не получилось:

&vec = hit[1]; 

error: expression is not assignable

Я также попытался ниже, не получилось:

map< int, vector<float> >::iterator itr; 
    itr = hit.find(1); 
    &vec = itr->second; 

error: expression is not assignable

Кто-нибудь знает, почему это не работает, и как я могу получить вектор с карты?

спасибо заранее

Edit: Вот что getAlignedHits делает и переменные я там:

const int NLayer = 6;, vector<float> *hit_position; double alignmentpar[NLayer]; 


map< int, vector<float> > getAlignedHits(){ 
    double newpos; 
    for (int i=0; i<NLayer; i++) { 
     vector<float> bla; 
     bla.clear(); 
     hit[i] = bla; 
    } 

    for (unsigned int ihit=0; ihit<layerID->size(); ihit++) { 
     newpos = hit_position->at(ihit) - alignmentpar[layerID->at(ihit)]; 
     hit[layerID->at(ihit)].push_back(newpos); 
    } 

} 
+0

не должны 'VEC - itr-> второй,' работу? также кажется, что ошибка указывает на то, что вы вызываете некоторый метод 'const', кроме того, вы всегда должны сравнивать итератор, возвращаемый с' find' с 'end()' карты: 'if (itr! = hit.end()) vec = itr-> second; ' – EdChum

+4

Я считаю, что есть что-то еще, что вы не показываете нам, что вызывает эту ошибку. Это кажется прекрасным. – DimChtz

+3

@EdChum посмотрите на свои сообщения об ошибках, код примера не соответствует этой ошибке. Ошибка говорит, что вы делаете 'vector vec; map > hit; vec = hit [1]; ' – PeterT

ответ

0

Следующие работы для меня

std::vector<float> & h0 = hit[0]; 

или простой

auto & h0 = hit[0]; 

Полный пример

#include <map> 
#include <vector> 
#include <iostream> 

int main() 
{ 
    std::map< int, std::vector<float> > hit { { 0, {} } }; 

    std::vector<float> & h0a = hit[0]; 
    auto & h0b = hit[0]; 

    h0a.push_back(2.3); 

    std::cout << hit[0].front() << std::endl; 
    std::cout << h0a.front() << std::endl; 
    std::cout << h0b.front() << std::endl; 

    return 0; 
} 
+0

Yup, это работает. Но почему у ОП есть ошибка? – StoryTeller

+0

@storyTeller - я подозреваю, что он делает что-то вроде 'std :: vector vec; & vec = hit [0]; ' – max66

+0

Да, я делал это :), исправил его, std :: vector & h0a = hit [0]; работал. Большое спасибо! –

1

Конечно,

&vec = ... <something> 

не будет работать, так как вы однако не может присвоить адрес переменной что-то:

candidate function not viable: no known conversion from 'vector>' to 'const vector>' for 1st argument vector& operator=(const vector& __x);

дает мне ощущение, что вы пытаетесь выполнить это назначение в функции const или на объекте, который имеет к нему некоторую константу. Пожалуйста, поделитесь более «оригинальным» кодом, чтобы мы могли обнаружить ошибку.

+1

Посмотрите на источник своего комментария, фактическая ошибка говорит «преобразование из» вектора > 'to' const vector > '' – PeterT

+1

@PeterT делает это? Я не вижу упоминания о «двойнике» в OP. Я даже сделал текстовый поиск на веб-странице. – StoryTeller

+2

@StoryTeller, потому что разметка stackoverflow проглотила его, нажмите «отредактировать» его вопрос, и вы увидите – PeterT