Domanda

Ciao a tutti ho il seguente in una funzione membro

int tt = 6; 
vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
set<int>& egressCandidateStops = temp.at(dest);

e la seguente dichiarazione di una variabile membro

map<int, vector<set<int>>> m_egressCandidatesByDestAndOtMode;

Comunque ho un errore durante la compilazione (Intel Compiler 11.0)

1>C:\projects\svn\bdk\Source\ZenithAssignment\src\Iteration\PtBranchAndBoundIterationOriginRunner.cpp(85): error: no operator "[]" matches these operands
1>            operand types are: const std::map<int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>, std::less<int>, std::allocator<std::pair<const int, std::vector<std::set<int, std::less<int>, std::allocator<int>>, std::allocator<std::set<int, std::less<int>, std::allocator<int>>>>>>> [ const int ]
1>          vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
1>                                                                    ^

Lo so è avuto modo di essere qualcosa di sciocco, ma non riesco a vedere quello che ho fatto di sbagliato.

Aggiorna sto chiamando questo da una funzione membro const, che è il motivo per cui il tipo di variabile membro è const così ho pensato che qualcosa di simile alla seguente dovrebbe risolvere il problema:

int dest = 0, tt = 6; 
const set<int>& egressCandidateStops = m_egressCandidatesByDestAndOtMode[tt].at(dest); 

Ma no dadi ... ancora lo stesso errore.

È stato utile?

Soluzione

  

operandi tipi sono: const std :: map

map::operator[] non funziona con un const map.

I risposto questo pochi giorni fa.

  

mappa :: operator [] è un po 'strano. esso   fa questo:

     
      
  1. cercare la chiave.
  2.   
  3. Se trovato, restituirlo.
  4.   
  5. In caso contrario, inserirlo e default-costruire la sua associata   valore.
  6.   
  7. Quindi restituisce un riferimento al nuovo valore.
  8.   
     

Fase 3 è compatibile con costanza.   Piuttosto che avere due   operatore diversamente funzionante []   sovraccarichi, la lingua che le forze per   uso mappa :: trovare per gli oggetti const.

Altri suggerimenti

Il prototipo per [] è

 data_type& operator[](const key_type& k)

vale a dire. un'operazione non const, quindi non si può chiamare su un membro di una funzione membro const.

Si potrebbe modificare il codice a:

std::map<...>::const_iterator where = m_egressCandidatesByDestAndOtMode.find(tt);
if (egressCandidatesByDestAndOtMode.end() != where) {
    const vector<set<int>>& temp = where->second;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top