C++ List Insert -


i'm trying insert objects list in ordered manner, based on objects data member family_id

the first object created skips function, there @ least 1 object in list named 'families' before function executed.

running trouble list insert function... how can insert before or behind iterator (itr) using function? i'm not sure whether use push_front / push_back methods, if/else statement can quite long way...

would appreciate ideas on how create in simple way.

family class

class family { private:    int family_id;  public:    int get_family_id()    {       return family_id;    } }; 

main

list <family> families;  void insertfamily(int input_id) {    list<family>::iterator itr;    for(itr = families.begin(); itr != families.end(); itr++)    {       if (input_id < itr->get_familyid())       {          family *fam = new family(input_id);          families.insert(itr, *fam);          // insert object first position of list,          // bumping original second position?       } else          itr++       } }; 

if you're asking think you're asking, insert function put value position given, , push else back. example:

#include <list> #include <iostream> int main(){     std::list<int> my_list;     for(int = 0; < 5; i++)         my_list.push_back(i);     std::list<int>::iterator itr = my_list.begin();     ++itr;     my_list.insert(itr, 5);     for(itr = my_list.begin(); itr != my_list.end(); ++itr)         std::cout << *itr << " "; } 

prints 0 5 1 2 3 4

so if want insert before whatever stop on, call insert given; if want insert after whatever stop on, call ++itr , insert.


edit: if i'm reading code right, you're missing break statement

family *fam = new family(input_id); families.insert(itr, *fam); break; ^^^^ 

this breaks loop when you're done; without it, you'll keep adding new families same id every family lower index. also, don't need itr++ in else statement, since it's being called in loop (unless want increase twice when it's not matched?). code might like:

main

list <family> families;  void insertfamily(int input_id) { list<family>::iterator itr; for(itr = families.begin(); itr != families.end(); itr++) {    if (input_id < itr->get_familyid())    {          family *fam = new family(input_id);          families.insert(itr, *fam);          break; //added break line    } //removed else }; 

if want faster insertion, might binary searching, won't unless have large list. other that, code looks good!


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -