独特的结构清单

时间:2017-08-14 19:44:00

标签: c++ list struct unique

我有以下结构列表

switch(view.getId()) {
   case R.id.accept_textview:
       // do what you want when click accept textview
   break;
}

我想知道有多少独特的群体

例如

struct Element
{
   int id;
   int groupID;

  };

此处有4个元素,但只有3个唯一的组ID 0,1,2

我试图寻找一种有效的方法来做到这一点因为我的名单增长了。

我试过这个

 list<Element> myElements;
  Element e;
  e.id = 0;
  e.groupID = 2;
  myElements.push_back(e);

  e.id = 1;
  e.groupID = 0;
  myElements.push_back(e);

  e.id = 2;
  e.groupID = 2;
  myElements.push_back(e);

  e.id = 3;
  e.groupID = 1;
  myElements.push_back(e);

但这会让我回到2个不重复的ID 0,1

1 个答案:

答案 0 :(得分:2)

使用集合来存储项目(暂时)。集合将仅存储唯一项目。集合的大小是唯一项目的数量。

为对象添加相等比较器:

struct Element {
  bool operator==(Element const& rhs) const {
    return id == rhs.id && groupId == rhs.groupId;
  }
};

使用set

std::set<Element> elementSet{elementList.begin(), elementList.end()};
size_t const numUniqueElements = elementSet.size();

请注意,构建set会产生一些成本(时间和空间复杂性)。如果您想将重复用于其他目的,则可以继续使用list,否则可以从listset进行切换,以便始终拥有唯一的可用数据(通过.size()