Bonjour à tous,

Je possède une structure sous cette forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !