2014-11-02 2 views
0

Я пытаюсь вернуть конкретный объект моего станд :: Карта выглядит следующим образом:Доступ элементы карты

const Vertex& Graph::getVertex(const std::pair<size_t, size_t>& pos) const // -> compile error 
{ 
    return this->_vertices[std::get<0>(pos)][std::get<1>(pos)]; 
} 

Карта:

std::map<size_t, std::vector<Vertex>> _vertices; 

Однако я получаю ошибку компиляции, если я позволю константность моей функции getVertex. Означает ли это, что доступ к моим элементам карты таким образом фактически изменяет его экземпляр? Есть ли лучший способ доступа к моим элементам карты?

Ошибка:

error: passing ‘const std::map<unsigned int, std::vector<Vertex> >’ as ‘this’ argument of ‘std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::o\ 
    perator[](const key_type&) [with _Key = unsigned int; _Tp = std::vector<Vertex>; _Compare = std::less<unsigned int>; _Alloc = std::allocator<std::pair<const unsigned int, std::vector<Vertex> > >; std::map\ 
    <_Key, _Tp, _Compare, _Alloc>::mapped_type = std::vector<Vertex>; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = unsigned int]’ discards qualifiers [-fpermissive] 
+0

Http: // stackoverflow.com/questions/5134614/c-const-map-element-access – jogojapan

+0

http://stackoverflow.com/questions/262853/c-map-access-discards-qualifiers-c onst – jogojapan

ответ

1

getVertex является константная функция член

this->_vertices[std::get<0>(pos)][std::get<1>(pos)];может изменить _vertices карту с помощью std::map::operator[] когда ключ не существует, следовательно, ошибки

Смежные вопросы