multi_index_container et non const
Bonjour à tous,
Je possède une structure sous cette forme :
Code:
1 2 3 4 5 6 7 8 9
|
struct SData
{
long id;
std::string name;
std::string field_a;
std::string field_b;
std::string field_c;
}; |
J'ai besoin d'un conteneur pour stocker une liste de ces données, et pour y accéder tantôt par l'identifiant de la donnée, tantôt par son nom.
Alors j'ai choisis le boost::multi_index_container :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
struct SOrderedAsIds{};
struct SOrderedAsNames{};
typedef boost::multi_index::multi_index_container<
SData, // Container de SData
boost::multi_index::indexed_by< // référencé par
boost::multi_index::ordered_unique< // Ids
boost::multi_index::tag<SOrderedAsIds>,
BOOST_MULTI_INDEX_MEMBER(SData,long,id)
>,
boost::multi_index::ordered_unique< // Names
boost::multi_index::tag<SOrderedAsNames>,
BOOST_MULTI_INDEX_MEMBER(SData,std::string,name)
>
>
> TMySet; |
Mon problème est que j'ai également besoin de parcourir cette liste afin de remplir les éléments field_a, field_b et field_c. Mais lorsque j'accède aux éléments de cette liste, ils sont obligatoirement constant.
C'est comme si dans le cadre d'un std::vector, il n'y avait que des const_iterator.
J'imagine que c'est pour interdire la modification des champs indexés (dans mon cas id et name), nécessitant alors la reconstruction des index du conteneur.
Y a-t-il quelque chose que je puisse faire pour pallier à ça ?
L'idée à la base était que ça soit un peu plus propre et plus performant que de stocker ça dans un vector et proposer des fonctions qui vont parcourir la liste, tester les champs et renvoyer lorsqu'il y a correspondance entre les valeurs.
En vous remerciant par avance,
A bientôt !