Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.c++.moderated    |    Moderated discussion of C++ superhackery    |    33,346 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 32,520 of 33,346    |
|    =?ISO-8859-1?Q?Daniel_Kr=FCgler?= to All    |
|    Re: Best way to pass a map-like containe    |
|    01 Sep 12 05:27:48    |
      From: daniel.kruegler@googlemail.com              Am 31.08.2012 23:16, schrieb Marco Guazzone:        > On Friday, August 31, 2012 12:13:36 AM UTC+2, Daniel Krügler wrote:        > [cut]        >        >>> But, when the container is a map (or similar), what do you use?        >>        >> It certainly depends what you want to realize. There are clearly        >> reasonable use-cases, where the associative container can be        >> considered as a sequence of elements. This makes sense, because        >> associative containers and unordered containers also satisfy the        >> Container requirements.        >>        >>> Possibile candidates:        >>>        >>> 1. Two parameters: the first/last iterator pair:        >>> map<...,...> m;        >>> foo(m.begin(), m.end())        >>        >> Yes, this is IMO a very intuitive one. But you may need to explain        >> what foo is going to do, before we speculate on that.        >        > You're right.        > In fact, a possible issue with this signature is when you pass        > iterators to multimap. 'foo', to work correctly, should not make        > any assumption on the uniqueness of the first element of each pair.        >        > Maybe, in that case, it would be better to directly pass the        > container?              The reason I was asking about foo is related to that. If foo is a very       general operation that can be performed without having a container at       hand, it makes very much sense in C++11 (without a proper range       concept) to provide an overload accepting a pair of iterators       representing a range.               >>> 2. Four parameters: the first/last iterator pair representing the        > [cut]        >>        >> I do'n see much value of this signature, but I certainly think        >> that it would be nice to have a view on std::map that solely        >> iterates over its keys or over its values. Java's Map interface        >> provides these views and I would say that these two views are        >> quite often used.        >        > Yes I agree. In addition to Java, there're many other languages        > that have them (e.g., D, Perl, PHP and Python, just to name a        > few). It's a pity that C++11 does not have them, or am I wrong?        >        > [cut]        >        >> I would consider as a different approach that accepts a range as        >> argument. Certainly this approach is often very useful as well,        >> for any container. The very advantage is that the caller has no        >> chance to provide a wrong combination of iterator arguments.        >        > Interesting. I assume you're referring to Boost.Range, are you?              Yes, for example. I really think that C++ should introduce a range       template. Unfortunately it didn't make it into C++11.              If such a range template exists, it would be much simpler to add two       functions associated with the map types that return a range over they       key elements or over the mapped value elements.              HTH & Greetings from Bremen,              Daniel Krügler                            --        [ See http://www.gotw.ca/resources/clcm.htm for info about ]        [ comp.lang.c++.moderated. First time posters: Do this! ]              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca