2017-10-12 7 views
0

J'essaie de trouver le point le plus à gauche sur un graphique d'un ensemble aléatoire de points. Par exemple, sur les points (3, 5) (5, 2) (8, 7) (1, 3), le point le plus à gauche serait (1, 3). Une fois que je fais cela, je dois mettre le point le plus à gauche dans l'endroit 0 d'un vecteur. J'ai du mal à changer deux variables car je ne sais pas de quel endroit est originaire MostLeft. mostLeft est un noeud contenant deux octets.Échange de deux valeurs dans un vecteur

J'ai essayé d'utiliser

swap(list[0], mostLeft) 

mais il seulement des copies mostLeft deux fois.

J'ai aussi essayé

Point temp = list[0]; 
    list.erase(remove(list.begin(), list.end(). mostLeft), list.end()); 
    list[0] = left; 
    list.push_back(temp); 

mais cela me donne l'erreur « ne peut convertir vecteur const char * pour argument pour enlever ». J'ai eu le deuxième bloc de code en ligne. Je ne sais pas comment cela fonctionnerait, mais j'ai continué à le voir apparaître alors je l'ai essayé.

Existe-t-il un moyen facile d'échanger ces valeurs ou dois-je parcourir manuellement le vecteur et trouver la valeur.

+2

S'il vous plaît donner un exemple minimal valable, que le code ni compiles , 'bein()' ou 'list.end(). mostleft' ne sont sûrement pas pris de quelque chose que vous utilisez ou que vous essayez d'utiliser. –

+0

@mhemmy On ne sait pas comment vous obtenez le plus utilisé dans le swap (liste [0], mostLeft) –

+0

Je suppose que 'mostLeft' est _not_ une référence. – MSalters

Répondre

0

Si je comprends bien ce que vous essayez d'atteindre, vous pouvez utiliser l'approche suivante

#include <iostream> 
#include <utility> 
#include <vector> 
#include <algorithm> 

int main() 
{ 
    std::vector<std::pair<int, int>> v = 
    { 
     { 3, 5 }, { 5, 2 }, { 8, 7 }, { 1, 3 } 
    }; 

    for (const auto &p : v) 
    { 
     std::cout << "(" << p.first << ", " << p.second << ") "; 
    } 
    std::cout << std::endl; 

    auto mostLeft = [](const auto &a, const auto &b) { return a.first < b.first; }; 

    std::swap(v[0], *std::min_element(v.begin(), v.end(), mostLeft)); 

    for (const auto &p : v) 
    { 
     std::cout << "(" << p.first << ", " << p.second << ") "; 
    } 
    std::cout << std::endl; 
} 

La sortie du programme est

(3, 5) (5, 2) (8, 7) (1, 3) 
(1, 3) (5, 2) (8, 7) (3, 5)