Re: Map to store 3 items
On May 8, 7:03 am, Paavo Helde <nob...@ebi.ee> wrote:
Brad <b...@16systems.com> wrote innews:fvtks8$jte$1@solaris.cc.vt.edu:
New to C++. Just ran into a need to store three things in a map. Before
trying it, I thought I'd post here and ask for advice. Here is an
example of what I need to store:
map<string name, string prefix, int length>
Both name and prefix would be unique for each map entry.
It's not clear what constitutes your map key and what is in your map
value. In general, both can be structs or classes. If you use a struct
or class as the map key you have to define operator<() for it, otherwise
the map could not maintain the keys in sorted order.
That's not really true, and in fact, most of the time, if I'm
using a class type as a key, I'll specify the ordering function
for the map, rather than define an operator< which might have an
otherwise counter-intuitive meaning. Of course, if there is a
logical ordering, which makes sense in general, and isn't being
"invented" just in order to use the objects in map, then
defining operator< is the simpler solution.
E.g.
struct MyKeyType {
std::string name_;
std::string prefix_;
MyKeyType(const std::string& name, const std::string& prefix)
: name_(name), prefix_(prefix)
{}
bool operator<(const MyKeyType& b) const {
return name_<b.name_ || (name_==b.name_ && prefix_<b.p=
refix_);
}
};
std::map<MyKeyType, int> my_map;
my_map[MyKeyType("foo","bar")] = 22;
std::string prefix1 = my_map.begin()->first.prefix_;
The same can be accomplished by using std::pair, but then you
cannot give meaningful names to the struct members, and
combining more data to the key becomes cumbersome.
Agreed. std::pair is almost never a good solution.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34