2017-04-22 6 views
-2

C++でstd :: setを使用する際に問題があります。なぜなら、使用方法がわからないからです。構造体のフィールドによって構造体のstd :: setを並べ替える方法

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; 

は今、私は「重要度」でのstd ::彼らにソート昇順になるように設定を使用する(より大きな、より価値):

だから、私はこの構造体を持っています。

厳守質問:私は、私は同じ重要性を持つより多くの電子メールを持っている場合、私はそれはstdに自分の名前を追加したいキー

2)としての重要性はintを設定するにはどうすればよい

1): :文字列、これを行うにはこのアプローチの方法はありますか?

+0

まず、一緒に –

+0

構造体は、主にデータを格納するために使用されている変数や関数を持ったときにクラスを使用し、それらの中に関数を持たないようにする –

+0

ブックリストを見るhttp://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

答えて

0

使用あなたのセット内の非デフォルトの比較関数:

#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"; 
} 

出力:

1,2 
2,1 
関連する問題