c++ - Unique list of structure -


i have list of following structure

struct element {    int id;    int groupid;    }; 

i want know how many unique groups there

for example

 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); 

there 4 elements here 3 unique group ids 0, 1, 2

i'm trying efficient way because list grows in size.

i tried

struct groupid_unique {   bool operator() (element first, element second)     { return (first.groupid != second.groupid); }      };      myelements.unique(groupid_unique()); 

but returns me 2 un-repetitive ids 0,1

use set store items (temporarily). set store unique items. size of set number of unique items.

add equality comparator object:

struct element {   bool operator==(element const& rhs) const {     return id == rhs.id && groupid == rhs.groupid;   } }; 

use set.

std::set<element> elementset{elementlist.begin(), elementlist.end()}; size_t const numuniqueelements = elementset.size(); 

note there cost (time , space complexity) in constructing set. if want keep repetitions other purpose, can continue list otherwise can switch list , set have unique count readily available (through .size())


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -