2011-06-21 8 views
0

IDが{3,7,1,5}のセットがあります。私はテーブル7 [テーブル[1]とき、1の前に7を持っていると思います。STLセットの比較クラスの問題

  • 私は二つの部材持つクラス(MyClass1)、持っている:ベクタテーブルおよびオペレータ()
  • 演算子()がtrueを返す、テーブル[A] <テーブル[私はそれをこのようにやりましたB]私は< unsigned int型を設定している別のクラス(MyClass2)で
  • 、MyClass1> MySet1
  • 私は(MySet1.insertを使用)MyClass2

のメンバーの内側しかし...オペレータと思われます( )はテーブルにアクセスできませんtable [a]またはtable [b]を使用するとsegfaultが発生し、table.size()は常に0を返します(テーブルが空でない場合でも)。

どうすればよいですか?

+2

に役立つソースコードを投稿してください。 –

+0

あなたのコードを記述しようとするのではなく、コードの(関連する)セクションを投稿するだけではどうですか? –

+1

コードを投稿してください。物語から何が間違っているかを理解することは不可能です。 – StevieG

答えて

0

おそらく、この小さなサンプルでは

#include <map> 
#include <vector> 
#include <algorithm> 
#include <iostream> 
#include <iterator> 

typedef int sortkey_t; 
typedef std::map<int, sortkey_t> lookup_t; 

struct by_sort_lookup 
{ 
    by_sort_lookup(const lookup_t& table) : _table(table) {} 

    bool operator()(int a, int b) const 
    { 
     lookup_t::const_iterator ai = _table.find(a); 
     lookup_t::const_iterator bi = _table.find(b); 

     if (ai==bi)   return false; 
     if (ai==_table.end()) return false; // choose some 
     if (bi==_table.end()) return true; // complementary 
     return (ai->second) < (bi->second); 
    } 
    private: 
    const lookup_t& _table; 
}; 

int main() 
{ 
    std::map<int, sortkey_t> sortkey_by_id; 

    sortkey_by_id[1] = 70; 
    sortkey_by_id[2] = 60; 
    sortkey_by_id[3] = 80; 

    // 
    std::vector<int> ids; 
    ids.push_back(1); 
    ids.push_back(3); 
    ids.push_back(2); 

    std::cout << "before sorting: " << std::endl; 
    std::copy(ids.begin(), ids.end(), std::ostream_iterator<int>(std::cout, "\r\n")); 

    std::sort(ids.begin(), ids.end(), by_sort_lookup(sortkey_by_id)); 

    std::cout << "after sorting: " << std::endl; 
    std::copy(ids.begin(), ids.end(), std::ostream_iterator<int>(std::cout, "\r\n")); 
}