On 2007-11-03 10:20:01 -0400, Chris Forone <> said:
> Chris Forone schrieb:
>> Chris Forone schrieb:
>>> 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)