J'ai un ensemble de clés. Je veux convertir ces clés dans les valeurs de clé d'une carte. Je veux commodément définir chacune des valeurs correspondantes sur la carte de la même valeur (1).
Voici un exemple reproductible. P>
set<string> keys; keys.insert("key1"); keys.insert("key2"); map<string,int> keys_with_values; // I want keys_with_values to equal "key1": 1, "key2": 1
3 Réponses :
Merci, @sam Varshavchik --Here est comment j'ai implémenté la boucle
set<string> keys; keys.insert("key1"); keys.insert("key2"); map<string,int> keys_with_values; for(auto key : keys) { keys_with_values[key] = 1; } cout << keys_with_values["key1"]; // 1
En respectant le commentaire Diversittie C ++ de Sam, vous pouvez également faire keys_with_values.insert ({clé, 1}) code> :-)
Je veux ajouter une autre manière, très c ++ - y de faire cela:
#include <set> #include <map> #include <iterator> #include <string> #include <algorithm> int main () { std::set<std::string> keys; keys.insert("key1"); keys.insert("key2"); std::map<std::string,int> keys_with_values; std::transform(keys.cbegin(), keys.cend(), std::inserter(keys_with_values, begin(keys_with_values)), [] (const std::string &arg) { return std::make_pair(arg, 1);}); }
Voici une autre solution à l'aide de Lambdas: et pour l'assurance complet, voici l'un à l'aide d'itérateurs: P> set<string>::iterator it = keys.begin();
while (it != keys.end())
{
keys_with_values.insert({ *it, 1});
it++;
}
Oui, vous devez faire boucle à travers l'ensemble, sous une forme ou de la mode, et aussi loin que "quel est le meilleur moyen" de le faire, nous sommes de retour au même problème: Demandez deux développeurs C ++ Quelle est la meilleure façon de Faites X, et vous obtiendrez trois réponses différentes. Vous devez décider que vous-même, en fonction de ce que «meilleur» signifie pour vous.
Domaine de la raison Vous voulez un
1 code> pas un
0 code> comme valeur?
C'est pour ce que j'utilise. La carte détient des données sur les mots et leur fréquence dans un post. Ceci est pour initialiser la carte.
Il ressemblerait exactement à toutes les autres boucles dans la langue de programmation C ++. Une déclaration initiale, une condition de boucle et une expression post-itération. Ou une gamme de gamme C ++ 11. Toutes les boucles en C ++ regardent exactement la même chose.
J'ai un ensemble de clés. Je veux convertir ces clés dans les valeurs clés d'une carte i> - Pourquoi ne pas commencer par une carte? Quelle est la raison de l'ensemble
code>?
Je lis dans les données d'un CSV et il doit être formaté comme un ensemble. Mais j'ai finalement besoin de ces clés pour être sur une carte.
"La carte détient des données sur les mots et leur fréquence dans un poste. Ceci est destiné à initialiser la carte" Vous n'avez pas besoin d'initialiser la carte, il suffit de commencer à compter sur
0 code>
Et il doit être formaté comme un ensemble i> sonne comme une application de votre professeur ou de votre superviseur. Il n'y a pas besoin d'un
définir code> pour cela. Ne sait pas à quoi ressemble votre code, je parie une tasse de café que vous auriez pu ignorer de lire dans un ensemble et simplement lire dans la carte.