In Python, I can write a map literal like this:
mymap = {"one" : 1, "two" : 2, "three" : 3}
How can I do the equivalent in C++11?
What exactly do you want to initialize to zero? map's default constructor creates empty map. You may increase map's size only by inserting elements (like m["str1"]=0 or m. insert(std::map<std::string,int>::value_type("str2",0)) ).
To initialize the map with a random default value below is the approach: Approach: Declare a structure(say struct node) with a default value. Initialize Map with key mapped to struct node.
You can actually do this:
std::map<std::string, int> mymap = {{"one", 1}, {"two", 2}, {"three", 3}};
What is actually happening here is that std::map
stores an std::pair
of the key value types, in this case std::pair<const std::string,int>
. This is only possible because of c++11's new uniform initialization syntax which in this case calls a constructor overload of std::pair<const std::string,int>
. In this case std::map
has a constructor with an std::intializer_list
which is responsible for the outside braces.
So unlike python's any class you create can use this syntax to initialize itself as long as you create a constructor that takes an initializer list (or uniform initialization syntax is applicable)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With