C++ equivalent of Python dictionaries
In C++ this would be a std::unordered_map
#include <unordered_map>
std::unordered_map<int, int> dict
{
{
{ 4, 3 },
{ 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
{ 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
}
};
The closest match in C++ would be an std::unordered_map<int, int>
. This is a hash table mapping int
keys to int
values.
#include <unordered_map>
std::unordered_map<int, int> RANKS = {
{ 4, 3 },
{ 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
{ 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
};
You can access elements using operator[]
, for example
std::cout << RANKS[0] << std::endl; // prints "2"
Note that the C++ standard library also has the std::map
class template, which allows you to create a similar but ordered look-up table std::map<int, int>
, with logarithmic look-up and insertion complexity. But python dict
s are hash tables, so unordered_map
is a closer match in terms of behaviour.
You could use a map or unordered_map for this (and they'd work fine) but given that your keys are a dense set of integers (I.e. all the integers from 0 to N) there are better choices.
I'd probably use an std::array
instead. It would look something like this:
std::array <char, 9> vals = { 2, 1, 2, 1, 3, 1, 2, 1, 2 };
This gives pretty much the same syntax and observable behavior, but will typically save quite a bit of memory and probably CPU time as well.