map und operator+



  • Kann jemand mir sagen wieso mein Compiler bei:

    #include<map>
    int foo(const std::map<int,int>&a){
      return a[5];
    }
    

    Mit
    [quote=BCC5.5]Error E2094 main.cpp 3: 'operator+' not implemented in type 'std::map<int,int,std::less<int>,std::allocator<std::pair<const int,int> > >' for arguments of type 'int' in function foo(const std::map<int,int,std::less<int>,std::allocator<std::pair<const int,int> > > &)[/quote]
    meckert?



  • der operator[] ist nicht als const definiert.

    was auch immer



  • Wenn ich const weg lasse dann klap es, wieso gibt es denn kein operator[]const?



  • Weil der operator[] der Map ein neues Objekt hinzufügt, wenn der Key nicht gefunden wird. Das ist mit einer const Map schlecht möglich.



  • Wenn ich in einer const map den operator[] verwende dann gehe ich ja davon aus, dass es den Wert gibt. Wenn es ihn nicht gibt dann ist das doch ein Fall für logic_error, oder?



  • *** schrieb:

    Wenn ich in einer const map den operator[] verwende dann gehe ich ja davon aus, dass es den Wert gibt.

    Diese Logik verstehe ich nicht. Wenn du nicht willst, dass für einen nicht vorhandenden Key ein neuer Wert eingefügt wird, dann nimm doch std:🗺:find:

    #include<map>
    #include <cassert>
    int foo(const std::map<int,int>&a)
    {
    	std::map<int,int>::const_iterator i = a.find(5);
    	assert(i != a.end()); // oder was auch immer
    	return i->second;
    }
    

Anmelden zum Antworten