我想从具有结构部分成员的集合中找到一个结构

I want to find a struct from set with partial member of struct

本文关键字:结构 一个 集合 结构部 成员      更新时间:2023-10-16
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 的集合迭代器。并想打印它我必须输入哪个代码

(??)?

你可以这样做

第一种方式:

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就像"for(..)"一样,所以第二种方式是

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

你的结构存储在一个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!
}