A problem with Nested Maps

U

utab

Dear all,

I am trying to create a look-up table for a text search and replacement
class which will be used with a commercial software(MCS NASTRAN, I
guess you may have heard that before ).

I want to create a table like

vector<string> ===mapping=== (vector<string>, vector<int>)

more clearly, as an example:

GRID GRID 1
ID 2
CP 3
X1 4
X2 5
X3 6
CD 7
PS 8
SEID 9

Here there will be another entry like this

Field1 string1 int1
. .
. .
string9 int2

So I tried something with a nested map, but the problem is that(I
think) since the elements of a map are pairs and the keys of these
pairs are constant, I could not initialize that with the values I
wanted, take a look at:

map<vector<string>,map<vector<string>,vector<int> > > mapp;
map<vector<string>,map<vector<string>,vector<int> > >::iterator
iter_;
map<vector<string>,vector<int> >::iterator iter__;

iter_->first.push_back("GRID");
(iter_->second).(iter__->first.push_back("GRID"));
(iter_->second).(iter__->second.push_back(1));

Since my stl knowledge is limited, I need help from experienced
programmers.

Regards,
 
D

davidrubin

A map keyed on vector<string>? This does not sound like a good start.
Can you explain the problem in a little more detail? I could not really
infer anything from the two sample tables you presented. What exactly
are you trying to do?
 
H

Heinz Ozwirk

utab said:
Dear all,

I am trying to create a look-up table for a text search and replacement
class which will be used with a commercial software(MCS NASTRAN, I
guess you may have heard that before ).

I want to create a table like

vector<string> ===mapping=== (vector<string>, vector<int>)

more clearly, as an example:

GRID GRID 1
ID 2
CP 3
X1 4
X2 5
X3 6
CD 7
PS 8
SEID 9

Here there will be another entry like this

Field1 string1 int1
. .
. .
string9 int2

Looks like you first need a map<string, int> to store pairs like (ID, 2), (CP, 3) ... That should be simple:

typedef std::map<std::string, int> MapStringToInt;

Then to map GRID to the first group of pairs, Field1 to the next group etc. you should use a map from string to MapStringToInt:

typedef std::map<std::string, MapStringToInt> MapStringToMap;

Now you can create a map to maps and populate it:

MapStringToMap metaMap;
metaMap["GRID"].insert(MapStringToInt::value_type("GRID", 1));
metaMap["GRID"].insert(MapStringToInt::value_type("ID", 2));
...
metaMap["Fields1"].insert(MapStringToInt::value_type("string1, int1));
metaMap["Fields1"].insert(MapStringToInt::value_type("string2, int2));
...

HTH
Heinz
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,233
Members
46,821
Latest member
AleidaSchi

Latest Threads

Top