On 2/19/07, Gottlob Frege
I was just concerned that you were putting too much meaning into std::pair (in general, not just in the context of maps). The members never really should have been called 'first/second' (implying order or lack of symmetry or any other meaning). I think it was just such a generic concept ('pair') that it was hard to name the members - maybe they should have just been called 'foo' and 'bar' to avoid any meaning. So do you feel first/second has too much meaning, or that it has too much meaning and history in the context of map? ie if you are saying that even if they were named foo/bar you would still want something different so as to emphasize the difference from std::map, I can understand that.
As you said, first/second has a lot of meaning in the context of the standard mapping framework. You have express it very clear.
- I think 'relation' is too generic a word to abscond.
From the dictionary: "A logical or natural association between two or more things"
It is mostly the 'or more' that bothers me. And that 'left/right' is more specific than 'relation'. left <-> right is a very specific relation (called 'opposing directions' or something like that) as is first <-> second "before/after", as is "between" - a relation between 3 things. 'relation' is a term that covers all of these, and is thus too generic. Do you want a term for a generic 2 item relation or a specific 2 item relation? What are the properties of your specific relation? 'balanced'? 'invertable'?
'symmetric'... 'bidirectional'... This discussion will surely take place later on the review. If other people think that is better to rename this new beast, I have no problem to change it. The important thing is to maintain the left/right notation.
In the end, it also hinges on the namespace issue. 'bimap::relation' is, to me, a very specific relation (the relation inherent in a bimap). 'boost::relation' or 'using bimap; ... relation' is polluting with a too generic term.
relation will be inside boost::bimap namespace, not in boost.
- the nature of typing code forces order - ie note that bimap
is different than bimap (although philosophically the same). (Side Note: Using tags they are exactly the same.)
The same to the compiler? and to boost::mpl? Cool. And as it should be.
Yes, from the tutorial: struct id {}; // Tag for the identification number struct name {}; // Tag for the name of the person typedef bimap< tagged< int , id >, tagged< multiset_of<string>, name >
People;
People people;
// ...
map_by<id>(people)[28928546] = "Gray Simpson";
map_by<name>(people).insert(
value_type_by
People;
and everything will just work. Best Regards Matias