Connecting Tech Pros Worldwide Forums | Help | Site Map

std::valarray as value in std::map

Chris Forone
Guest
 
Posts: n/a
#1: Nov 3 '07
Hello group,

g++ (3.4.2, mingw):

float init[] = {1.f, 2.f, 3.f};
std::map<std::string, std::valarray<float mp;

mp["name"] = std::valarray(init, 3);
mp["name"].size(); // should be 3, but IS 0!

Do i ignored something? Does map not do a copy of value?

HAND, Chris

Chris Forone
Guest
 
Posts: n/a
#2: Nov 3 '07

re: std::valarray as value in std::map


Chris Forone schrieb:
Quote:
Hello group,
>
g++ (3.4.2, mingw):
>
float init[] = {1.f, 2.f, 3.f};
std::map<std::string, std::valarray<float mp;
>
mp["name"] = std::valarray(init, 3);
mp["name"].size(); // should be 3, but IS 0!
>
Do i ignored something? Does map not do a copy of value?
>
HAND, Chris
compilable:

#include <iostream>
#include <map>
#include <valarray>

int main()
{
float init[] = {1.f, 2.f, 3.f};
std::map<std::string, std::valarray<float mp;

mp["name"] = std::valarray<float>(init, 3);

std::cout << mp["name"].size() << std::endl;
}

g++ (4.1.2, ubuntu) has the same behavior...

Chris
Chris Forone
Guest
 
Posts: n/a
#3: Nov 3 '07

re: std::valarray as value in std::map


Chris Forone schrieb:
Quote:
Chris Forone schrieb:
Quote:
>Hello group,
>>
>g++ (3.4.2, mingw):
>>
>float init[] = {1.f, 2.f, 3.f};
>std::map<std::string, std::valarray<float mp;
>>
>mp["name"] = std::valarray(init, 3);
>mp["name"].size(); // should be 3, but IS 0!
>>
>Do i ignored something? Does map not do a copy of value?
>>
>HAND, Chris
>
compilable:
>
#include <iostream>
#include <map>
#include <valarray>
>
int main()
{
float init[] = {1.f, 2.f, 3.f};
std::map<std::string, std::valarray<float mp;
>
mp["name"] = std::valarray<float>(init, 3);
>
std::cout << mp["name"].size() << std::endl;
}
>
g++ (4.1.2, ubuntu) has the same behavior...
>
Chris
SOLVED!

..insert does the trick... operator[] only does std-ctor...

HAND, Chris
Pete Becker
Guest
 
Posts: n/a
#4: Nov 5 '07

re: std::valarray as value in std::map


On 2007-11-03 10:20:01 -0400, Chris Forone <4one@gmx.atsaid:
Quote:
Chris Forone schrieb:
Quote:
>Chris Forone schrieb:
Quote:
>>Hello group,
>>>
>>g++ (3.4.2, mingw):
>>>
>>float init[] = {1.f, 2.f, 3.f};
>>std::map<std::string, std::valarray<float mp;
>>>
>>mp["name"] = std::valarray(init, 3);
>>mp["name"].size(); // should be 3, but IS 0!
>>>
>>Do i ignored something? Does map not do a copy of value?
>>>
>>HAND, Chris
>>
>compilable:
>>
>#include <iostream>
>#include <map>
>#include <valarray>
>>
>int main()
>{
> float init[] = {1.f, 2.f, 3.f};
> std::map<std::string, std::valarray<float mp;
> mp["name"] = std::valarray<float>(init, 3);
> std::cout << mp["name"].size() << std::endl;
>}
>>
>g++ (4.1.2, ubuntu) has the same behavior...
>>
>Chris
>
SOLVED!
>
.insert does the trick... operator[] only does std-ctor...
>
No, it doesn't. It just happens to look like it works. The problem has
nothing to do with valarray: you'll see the same behavior with any type
for the value. The problem is in the index, not the value. Quoted
strings are not guaranteed to be unique, so mp["name"] may be a
different map element than some other mp["name"].

--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)

James Kanze
Guest
 
Posts: n/a
#5: Nov 5 '07

re: std::valarray as value in std::map


On Nov 5, 2:22 pm, Pete Becker <p...@versatilecoding.comwrote:
Quote:
On 2007-11-03 10:20:01 -0400, Chris Forone <4...@gmx.atsaid:
Quote:
Chris Forone schrieb:
Quote:
Chris Forone schrieb:
>Hello group,
Quote:
Quote:
Quote:
>g++ (3.4.2, mingw):
Quote:
Quote:
Quote:
>float init[] = {1.f, 2.f, 3.f};
>std::map<std::string, std::valarray<float mp;
Quote:
Quote:
Quote:
>mp["name"] = std::valarray(init, 3);
>mp["name"].size(); // should be 3, but IS 0!
Quote:
Quote:
Quote:
>Do i ignored something? Does map not do a copy of value?
Quote:
Quote:
Quote:
>HAND, Chris
Quote:
Quote:
Quote:
compilable:
Quote:
Quote:
Quote:
#include <iostream>
#include <map>
#include <valarray>
Quote:
Quote:
Quote:
int main()
{
float init[] = {1.f, 2.f, 3.f};
std::map<std::string, std::valarray<float mp;
mp["name"] = std::valarray<float>(init, 3);
std::cout << mp["name"].size() << std::endl;
}
Quote:
Quote:
Quote:
g++ (4.1.2, ubuntu) has the same behavior...
Quote:
Quote:
SOLVED!
Quote:
Quote:
.insert does the trick... operator[] only does std-ctor...
Quote:
No, it doesn't. It just happens to look like it works. The
problem has nothing to do with valarray: you'll see the same
behavior with any type for the value. The problem is in the
index, not the value. Quoted strings are not guaranteed to be
unique, so mp["name"] may be a different map element than some
other mp["name"].
But his map uses std::string as a key, not char const*, so the
string literal will be converted.

I'm not familiar enough with valarray to really comment, but his
initial use of std::map seems correct: the call to mp["name"]
does insert a valarray constructed withe the default
constructor, before returning a reference to the new object; the
assignment operator then does whatever the assignment operator
for valarray does.

--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Pete Becker
Guest
 
Posts: n/a
#6: Nov 5 '07

re: std::valarray as value in std::map


On 2007-11-05 12:13:44 -0500, James Kanze <james.kanze@gmail.comsaid:
Quote:
On Nov 5, 2:22 pm, Pete Becker <p...@versatilecoding.comwrote:
>
Quote:
>No, it doesn't. It just happens to look like it works. The
>problem has nothing to do with valarray: you'll see the same
>behavior with any type for the value. The problem is in the
>index, not the value. Quoted strings are not guaranteed to be
>unique, so mp["name"] may be a different map element than some
>other mp["name"].
>
But his map uses std::string as a key, not char const*, so the
string literal will be converted.
>
Whoops, sorry about confusing the issue.

--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)

Closed Thread