James Wolfe
James Wolfe

Reputation: 75

I want to create something like a python dictionary in C++

I'm using a struct. Is there some way to iterate through all the items of type "number"?

struct number { int value; string name; };

Upvotes: 5

Views: 16471

Answers (3)

AlokThakur
AlokThakur

Reputation: 3741

In C++ map works like python dictionary, But there is a basic difference in two languages. C++ is typed and python having duck typing. C++ Map is typed and it can't accept any type of (key, value) like python dictionary. A sample code to make it more clear -

#include <iostream>
#include <map>
using namespace std;
  
map<int, char> mymap;
mymap[1] = 'a';
mymap[4] = 'b';

cout << "my map is -" << mymap[1] << " " <<mymap[4] << endl;

You can use tricks to have a map which will accept any type of key, Refer - http://www.cplusplus.com/forum/general/14982/

Upvotes: 10

Loki Astari
Loki Astari

Reputation: 264381

You can use std::map (or unordered_map)

     //  Key  Value Types.
std::map<int, std::string> data {{1, "Test"}, {2, "Plop"}, {3, "Kill"}, {4, "Beep"}};

for(auto item: data) {
                 // Key                  Value
    std::cout << item.first << " : " << item.second << "\n";
}

Compile and run:

> g++ -std=c++14 test.cpp
> ./a.out
1 : Test
2 : Plop
3 : Kill
4 : Beep

The difference between std::map and std::unordered_map is for std::map the items are ordered by the Key while in std::unordered_map the values are not ordered (thus they will be printed in a seemingly random order).

Internally they use very different structures but I am sure you are not interested in that level of detail.

Upvotes: 3

Embedded C
Embedded C

Reputation: 1464

As per my understanding you want to access a value and name using number. You can go for array of structure like number n[5]; where n[0],n[1],...n[4] but we have some additional features in c++ to achieve this with the predefined map, set You can find lots of examples for map

Upvotes: 3

Related Questions