2017-04-22 1 views
-2

Ich habe Probleme, std :: set in C++ zu verwenden, weil ich nicht verstehe, wie man es benutzt.Wie man ein std :: set einer Struktur durch ein Feld der Struktur anordnet

Also, ich habe diese Struktur:

typedef struct email_node 
{ 
    std::string *vects; 
    int l_str; 
    int importance; 

    email_node(std::string val, int imp) 
    { 
     vects = new std::string[1]; 
     vects[0] = val; 
     l_str = 1; 
     importance = imp; 
    } 

    email_node() 
    { 
     vects = new std::string[1]; 
     l_str = 1; 
    } 
} email_node; 

Jetzt will ich std verwenden :: setzen sie sortierten aufsteigend nach der „Bedeutung Wert“ haben (je größer, desto wertvoller).

Die punktuellen Fragen:

1) Wie kann ich die Bedeutung int als Schlüssel

2) gesetzt Wenn ich mehr E-Mails mit der gleichen Bedeutung haben, ich will ihren Namen in das std hinzuzufügen: : String, gibt es einen Weg mit diesem Ansatz, um das zu tun?

+0

zunächst eine Klasse verwenden, wenn Variablen und Funktionen zusammen –

+0

Struktur aufweist, wird in erster Linie verwendet, um Daten zu speichern, keine Funktionen in ihnen zu haben –

+0

Siehe die Buchliste http://StackOverflow.com/Questions/388242/the-definitive-c-book-guide-and-list –

Antwort

0

Verwenden Sie eine Nicht-Standard-Vergleichsfunktion in Ihrem Set:

#include <set> 
#include <iostream> 

struct S 
{ 
    int a; 
    int b; 
}; 

class compareByA 
{ 
public: 
bool operator()(S const & s1, S const & s2) 
{ 
    return s1.a < s2.a; 
} 
}; 

int main() 
{ 
    S ss{2,1}; 
    S st{1,2}; 

    std::set<S, compareByA> sset; 

    sset.insert(ss); 
    sset.insert(st); 

    auto iter = sset.begin(); 
    std::cout << iter->a << "," << iter->b << "\n"; 
    ++iter; 
    std::cout << iter->a << "," << iter->b << "\n"; 
} 

Ausgänge:

1,2 
2,1 
Verwandte Themen