2015-03-05 5 views
6

Possiedo un vettore di tuple vector<tuple<int,int>> vector; e voglio modificare una delle tuple che contiene.Modifica di una tupla in un vettore di tuple C++

for (std::tuple<int, int> tup : std::vector) 
{ 
    if (get<0>(tup) == k) 
    { 
     /* change get<1>(tup) to a new value 
     * and have that change shown in the vector 
     */ 
    } 
} 

Non so come modificare il valore della tupla e fare in modo che il cambiamento si rifletta nel vettore. Ho provato a utilizzare

get<1>(tup) = v; 

ma ciò non modifica il valore della tupla presente nel vettore. Come posso fare questo? Grazie.

risposta

14

Capture the tuple per riferimento:

for (tuple<int, int> &tup : vector){ 
//     ^here 
    if (get<0>(tup) == k){ 
     get<1>(tup) = v; 
    } 
} 
+0

Grazie, ho completamente dimenticato di questo! – uniwolk

+3

Puoi anche usare 'auto':' for (auto & tup: vector) {...} ' – Aleph7

5

Hai solo bisogno di utilizzare un riferimento al posto di un valore nel ciclo for:

for (tuple<int, int>& tup : vector){