2014-11-14 51 views
0
struct info{ 
      int a; 
      int b; 
      double c; 
      double d; 
      int e; 
     }; 


set<info> infoSet; 
info information; 

information.a = 1; 
information.b = 1; 
information.c = 1; 
information.d = 1; 
information.e = 1; 

infoSet.insert(information); 

information.a = 2; 
information.b = 2; 
information.c = 2; 
information.d = 2; 
information.e = 2; 

infoSet.insert(information); 

typedef pair<int, int> pairs; 
pairs p; 
p.first = 1; p.second = 1; 

set<info>::iterator it; 

it.find(??) 

c,d和e依赖于信息结构中的a和b(DB中的超类键)。 我想找到具有与p.first和second完全相同的结构成员a和b的集合的迭代器。并想打印它 哪些代码必须放入(??)?我想从结构中找到一个结构体struct

+0

哪里是'info',可以存储它在一个'set'的比较操作? –

回答

0

你可以那样做

第一种方式:

set<info> infoSet 

for_each(infoSet.begin(),infoSet.end(),bind2nd(ptr_fun(compare), pairs); 

//compare fun 
void compare(info, pair<int, int>) 
{ 
    ..... you can compare them here 
} 

的for_each就像是 “为(..)”,所以第二个方法是

set<info>::iterator it = infoSet.begin(); 
for(it; it!=infoSet.end(); it++) 
{ 
    if(it.first == p.first) 
{ 
    ...// do what you want 
    break; 
} 
} 
0

如果您想要将结构存储在set中,则需要为其提供一个比较谓词。

我想你想让你的结构尽可能简单,所以我在你的结构之外做了一个谓词和一个转换函数。

举例如下:

struct Info 
{ 
    int a; 
    int b; 
    double c; 
    double d; 
    int e; 
}; 

struct CompareInfo 
{ 
    bool operator() (const Info& lhs, const Info& rhs) const 
    { 
     return (lhs.a < rhs.a) && (lhs.b < rhs.b); // you can define your own rule here 
    } 
}; 

typedef std::pair<int, int> Pairs; 

Info MakeInfo(Pairs p) // convert from Pairs to Info 
{ 
    Info i = {p.first, p.second, 0, 0, 0}; // not sure what are values of c, d, e 
    return i; 
} 

std::set<Info, CompareInfo> infos; 
Info info1 = {1,1,1,1,1}; 
infos.insert(info1); 
Info info2 = {2,2,2,2,2}; 
infos.insert(info2); 

Pairs p(1,1); 
auto it = infos.find(MakeInfo(p)); 
if (it != infos.end()) 
{ 
    // you found it! 
} 
+0

谢谢!它适用于我! –

+0

太棒了!恭喜! ;) –

相关问题