2017-07-18 2 views
0

Ich habe eine große Datei mit Koordinaten und den WayIds. Was ich in einem Vektor mit der folgenden Struktur gespeichert:C++ push_back() eine Struktur in einen Vektor

  1. 52,8774, 6,7442, 777

  2. 52,8550, 6,7449, 777

  3. :

    struct SOne 
    { 
        double y, x, wayId; 
    }; 
    

    Die Datei sieht wie folgt aus

    52.8496, 6.7449, 776

In meinem Programm habe ich bereits die WayIds gefiltert, mit denen ich gerne weiterarbeiten und in einem Vektor namens "way" speichern würde. Mit einer for-Schleife kann ich die Koordinaten finden, aber ich weiß nicht, wie man sie in einem Vektor mit struct speichert.

vector<SOne> MyWays; 
for (int i = 0; i < Data.size(); i++) { // Data -> my file with all coordinates and wayIds 
    for (size_t j = 0; j < way.size(); j++){ 
     if (Data[i].WayId == way[j]) // way[j] -> here i get the WayId i like to work with 
     { 

     } // if 
    } // for 
} // for 

Ich habe versucht, diesen Link zu folgen: push_back() a struct into a vector aber es für mich nicht funktioniert hat. Kann mir jemand einen Tipp geben? Vielen Dank im Voraus

+5

Was meinst du mit "es hat nicht funktioniert für mich"? Ist 'MyWays.push_back (way [j]);' was du suchst? – freakish

+3

Sie zeigen den Code, der nicht funktioniert hat, nicht an. Es wäre eine gute Idee, auch genau diesen Code zu zeigen. Und "hat nicht funktioniert" ist zu vage. Was ist passiert? Ein Kompilierzeit- oder Laufzeitfehler? Wenn ja, zeigen Sie bitte den genauen Text der Nachricht. Fügen Sie all diese Informationen zu Ihrer Frage hinzu. –

+1

Was ist die Art von 'Data'? – Holt

Antwort

3
  1. Konstrukt SOne.
  2. Füllen Sie das Objekt.
  3. In MyWays einfügen.

    SOne sOneObj; 
    sOneObj.x = Data[i].X; 
    sOneObj.y = Data[i].Y; 
    sOneObj.wayId = Data[i].WayId; // = way[j] 
    MyWays.push_back(sOneObj); 
    
2

Sie können std::vector::emplace_back verwenden Elemente aus dem Data Vektor einzufügen, hat x vorausgesetzt, y, als auch

struct SOne 
{ 
    SOne(double y_in, double x_in, double wayId_in): 
    y(y_in), x(x_in), wayId(wayId_in) 
    { } 

    ~SOne() { } 

    SOne& SOne=(const SOne& other) = default; 
    SOne(const SOne& other) =default; 

    double y, x, wayId; 
}; 

// Inside the if check simply do : 
MyWays.emplace_back(Data[i].X, Data[i].Y, Data[i].WayId) ; 
0

Ihre Struktur sollte bereits ein Standard-Copykonstruktor haben das zu tun Job, so können Sie einfach MyWays.push_back(SOne(Data[i])); ohne Änderungen an anderen Teilen Ihres Codes verwenden