J'essaie de créer un Le code PROGAM est donné ci-dessous
J'essaie d'utiliser Bitset comme une clé pour une carte en C ++. Cependant, chaque fois que j'exécute le code ci-dessous, je rencontre des errros. P> mappe code> en C ++ avec
bitset code> en tant que clé. Cependant, le compilateur génère les messages d'erreur suivants
5 Réponses :
Utilisez simplement votre propre classe de comparaison: Notez que vous pouvez étendre cette solution pour supporter des bits de longueur arbitraire, tant qu'ils sont suffisamment petits pour être convertis en une longueur non signée: < / p>
Remarque: to_ulong code> ne fonctionne que si un
non signé INT code> peut contenir le résultat, et
non signé INT code> n'est que garanti par la norme d'au moins 16 bits, ce qui n'est pas grand chose.
Oui, j'ai signalé cela dans la solution modélisée. Merci pour la clarification de toute façon.
@Matthieum.: TO_ULONG (comme son nom l'indique) se convertit à un peu non signé longtemps, nous avons donc 32 bits garantis ici.
@Fontanini: Utilisez simplement le même type que STD :: Bitset fait pour le paramètre Taille (Taille_T). Vous préférez peut-être également nommer la structure par exemple. Bitset_less doit souligner que c'est pour les bits de bits spécifiquement. Ou vous pouvez spécialiser STD :: moins pour Bitsets.
@Plasmahh: Oupls à droite, je me suis glissé là-bas. Cependant, cela ne change pas le problème fondamental.
@Cwan, j'ai raté le paramètre Taille_T. Merci, je l'ai réparé.
@MFontanini Qu'en est-il de si un non signé long est suffisant? Peut-être que si le non signé long est suffisant, vous n'avez pas besoin d'utiliser le bitset ...
@VTS_CVS Le code de OP utilise des bits de bits de 8 bits, de sorte que la conversion à une longueur non signée est sûrement suffisante ici. Sur une autre situation, vous pouvez utiliser une autre approche.
Vous pouvez définir votre fonction de comparaison. Si vous supposez votre Bitset code> une valeur intégrale non signée, la fonction suivante doit commander le
bitset code> s dans la commande croissante (et fonctionne pour tout
n code>) .
mymap[0] is the pair ((0,0,0,0,0,0,0,0,0,0), 0)
mymap[1] is the pair ((1,0,0,0,0,0,0,0,0,0), 1)
mymap[2] is the pair ((0,1,0,0,0,0,0,0,0,0), 2)
mymap[3] is the pair ((1,1,0,0,0,0,0,0,0,0), 3)
mymap[4] is the pair ((0,0,1,0,0,0,0,0,0,0), 4)
mymap[5] is the pair ((1,0,1,0,0,0,0,0,0,0), 5)
mymap[6] is the pair ((0,1,1,0,0,0,0,0,0,0), 6)
mymap[7] is the pair ((1,1,1,0,0,0,0,0,0,0), 7)
mymap[8] is the pair ((0,0,0,1,0,0,0,0,0,0), 8)
mymap[9] is the pair ((1,0,0,1,0,0,0,0,0,0), 9)
Ceci permettra à la carte
Une solution alternative consisterait simplement à utiliser un Ceci pourrait être Cela évite le besoin de comparaison et peut prouver plus rapidement , en fonction des exigences. P> unomment_map code>, si cela répond toujours à vos besoins. P>
STD :: Unommked_map
ou Boost :: Unommked_map
, selon la version C ++ ou Considérations sur la performance a >. p>
Pour stocker sur la carte, vous pouvez convertir Bitset à la chaîne pour les gros bitset s'il n'est pas convertible en U_LONG et pour la mise à jour Vous pouvez passer à Bitset et effectuer vos modifications et stocker en tant que chaîne.
map<string , int> mymap; bitset<N> mybs("10100"); // converting string to bitset map[mybs.to_string()] = 34; // bitset to string for map