joseph cook wrote:
A map is always sorted using std::less
Not always. By default, yes, but you can specify other comparators, eg:
std::map<int, int, std::greaterreversedMap; 6 5409
On Nov 20, 7:48*am, Juha Nieminen <nos...@thanks.invalidwrote:
joseph cook wrote:
A map is always sorted using std::less
* Not always. By default, yes, but you can specify other comparators, eg:
std::map<int, int, std::greaterreversedMap;
Or at runtime:
std::map<int, intmyMap(myPredicate);
Ali
On 2008-11-20 14:40:19 -0500, ac******@gmail.com said:
On Nov 20, 7:48Â*am, Juha Nieminen <nos...@thanks.invalidwrote:
>joseph cook wrote:
>>A map is always sorted using std::less
Â* Not always. By default, yes, but you can specify other comparators, e
g:
>> std::map<int, int, std::greaterreversedMap;
Or at runtime:
std::map<int, intmyMap(myPredicate);
Not really. There's a third type argument to std::map which specifies
the map's predicate type, with a default of std::less<T>. This
constructor takes an argument with the same type as the template's
predicate argument, so you can't pass arbitrary predicate objects. This
constructor is only useful with a user-defined predicate type that can
be initialized with something other than its default constructor.
--
Pete
Roundhouse Consulting, Ltd. ( www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
( www.petebecker.com/tr1book)
Pete Becker wrote:
On 2008-11-20 14:40:19 -0500, ac******@gmail.com said:
>On Nov 20, 7:48 am, Juha Nieminen <nos...@thanks.invalidwrote:
>>joseph cook wrote: A map is always sorted using std::less
Not always. By default, yes, but you can specify other comparators, e
g:
>>> std::map<int, int, std::greaterreversedMap;
Or at runtime:
std::map<int, intmyMap(myPredicate);
Not really. There's a third type argument to std::map which specifies
the map's predicate type, with a default of std::less<T>. This
constructor takes an argument with the same type as the template's
predicate argument, so you can't pass arbitrary predicate objects. This
constructor is only useful with a user-defined predicate type that can
be initialized with something other than its default constructor.
Well, basically that just does mean that it depends on a runtime value.
Otherwise, you wouldn't need those constructor arguments in the first place. ac******@gmail.com wrote:
std::map<int, intmyMap(myPredicate);
I don't think you can do that because the comparator template
parameter is set by default to std::less, and unless myPredicate casts
implicitly to type std::less, that won't work. You have to do it like:
std::map<int, int, MyPredicateTypemyMap(myPredicate);
If 'myPredicate' is a function, the syntax becomes awkward:
std::map<int, int, bool(*)(int, int)myMap(myPredicate);
This becomes even more awkward if the key and data types of the map
are something more complicated than int.
The next standard will offer a tool to alleviate the problem:
std::map<int, int, decltype(myPredicate)myMap(myPredicate);
On 2008-11-21 06:34:27 -0500, Rolf Magnus <ra******@t-online.desaid:
Pete Becker wrote:
>On 2008-11-20 14:40:19 -0500, ac******@gmail.com said:
>>On Nov 20, 7:48 am, Juha Nieminen <nos...@thanks.invalidwrote: joseph cook wrote: A map is always sorted using std::less
Not always. By default, yes, but you can specify other comparators, e g:
std::map<int, int, std::greaterreversedMap;
Or at runtime:
std::map<int, intmyMap(myPredicate); Not really. There's a third type argument to std::map which specifies the map's predicate type, with a default of std::less<T>. This constructor takes an argument with the same type as the template's predicate argument, so you can't pass arbitrary predicate objects. This constructor is only useful with a user-defined predicate type that can be initialized with something other than its default constructor.
Well, basically that just does mean that it depends on a runtime value.
Otherwise, you wouldn't need those constructor arguments in the first place.
It means that std::map<int, intmyMap(myPredicate) is an error unless
the type of myPredicate is std::less<int>, in which cast it's
irrelevant. In particular, it is not a runtime replacement for
std::map<int, int, std::greater<int>>.
--
Pete
Roundhouse Consulting, Ltd. ( www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
( www.petebecker.com/tr1book)
On 2008-11-21 08:46:16 -0500, Juha Nieminen <no****@thanks.invalidsaid: ac******@gmail.com wrote:
>std::map<int, intmyMap(myPredicate);
I don't think you can do that because the comparator template
parameter is set by default to std::less, and unless myPredicate casts
implicitly to type std::less, that won't work. You have to do it like:
std::map<int, int, MyPredicateTypemyMap(myPredicate);
If 'myPredicate' is a function, the syntax becomes awkward:
std::map<int, int, bool(*)(int, int)myMap(myPredicate);
Well, yes, and as we've seen in many Ginsu knife commercials, a normal
knife can't slice a tomato. The way to write this code is, of course,
with appropriate typedefs:
typedef bool (*pred)(int,int);
std::map<int, int, predmyMap(myPredicate);
>
This becomes even more awkward if the key and data types of the map
are something more complicated than int.
Not at all. Again, typedefs.
--
Pete
Roundhouse Consulting, Ltd. ( www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
( www.petebecker.com/tr1book) This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Peter Jansson |
last post by:
Hello,
I have the following code:
std::map<int,std::set<std::string> > k;
k="1234567890";
k="2345678901";
//...
std::set<std::string> myMethod(std::map<int,std::set<std::string> > k)...
|
by: jstanforth |
last post by:
This is probably a very obvious question, but I'm not clear on what
operators need to be implemented for std::map.find() to work. For
example, I have a class MyString that wraps std::string, and...
|
by: Erik Wikström |
last post by:
First of all, forgive me if this is the wrong place to ask this question,
if it's a stupid question (it's my second week with C++), or if this is
answered some place else (I've searched but not...
|
by: Maxwell |
last post by:
Hello,
I having having oodles of trouble using the std lib in my MC++ (VS.NET
2003) Class library. I figured out a simple sample to reproduce the
errors I am having. Create a MC++ (VS.NET 2003)...
|
by: Szabolcs Horvát |
last post by:
Consider the attached example program: an object of type 'A' is inserted
into a 'map<int, Am;'. Why does 'm;' call the copy constructor of
'A' twice in addition to a constructor call?
The...
| |
by: brzozo2 |
last post by:
Hello, this program might look abit long, but it's pretty simple and
easy to follow. What it does is read from a file, outputs the contents
to screen, and then writes them to a different file. It...
|
by: newbie |
last post by:
Same thing g++ complains when using hash_map<>, but is happy with
map<--I understand hahs_map is not standardized, but since the
compiler didn't complain something like 'hash_map<not defined', I...
|
by: jabbah |
last post by:
Actually I'm quite sure I've missed something trivial here, but I just can't find it.
Seemingly I cannot read from a const map&
I try
#include <iostream>
#include <map>
using namespace std;
|
by: jabbah |
last post by:
I have some data in a map and I want to sort it. Currently I have implemented it like this:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(){
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The...
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |