Да, но зато это в отличие от предыдущей версии делает то, что просил автор топика.
Если нужно, чтобы поиск был только один раз то нужно сделать, как уже сказали раньше, вот так:
Здравствуйте, _DAle_, Вы писали:
V>>Так 2 раза будет искать. _DA>Да, но зато это в отличие от предыдущей версии делает то, что просил автор топика.
Что не так с предыдущей
Здравствуйте, A.Lokotkov, Вы писали:
AL>Здравствуйте, IROV.., Вы писали:
IRO>>ну вопервых IRO>>myMap[myKey] = myValue; IRO>>это уже проверит, и вставит.
AL>если по заданному ключу до вставки лежит очень нужный объект, то он окажется в космосе. хотя, вероятно, топик-стартер этого в виду не имел.
Здравствуйте, IROV.., Вы писали:
IRO>Гавно, вопрос.
IRO>
IRO> size_type count(const key_type& _Keyval) const
IRO> { // count all elements that match _Keyval
IRO> _Paircc _Ans = equal_range(_Keyval);
IRO> size_type _Num = 0;
IRO> _Distance(_Ans.first, _Ans.second, _Num);
IRO> return (_Num);
IRO> }
IRO>
IRO>что мы тут видем, equal_range -> два find.
IRO>Distance!! может для когото секрет, что итерация у std::map это совсем не константная операция.
Осталось только сказать, что в мэпе всегда в интервале будет максимум один элемент, и никто не запрещал автора реализовать count для map более эффективно.
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, IROV.., Вы писали:
IRO>>Гавно, вопрос.
IRO>>
IRO>> size_type count(const key_type& _Keyval) const
IRO>> { // count all elements that match _Keyval
IRO>> _Paircc _Ans = equal_range(_Keyval);
IRO>> size_type _Num = 0;
IRO>> _Distance(_Ans.first, _Ans.second, _Num);
IRO>> return (_Num);
IRO>> }
IRO>>
IRO>>что мы тут видем, equal_range -> два find.
IRO>>Distance!! может для когото секрет, что итерация у std::map это совсем не константная операция.
_DA>Осталось только сказать, что в мэпе всегда в интервале будет максимум один элемент, и никто не запрещал автора реализовать count для map более эффективно.
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, _DAle_, Вы писали:
_DA>>Здравствуйте, IROV.., Вы писали:
IRO>>>Гавно, вопрос.
IRO>>>
IRO>>> size_type count(const key_type& _Keyval) const
IRO>>> { // count all elements that match _Keyval
IRO>>> _Paircc _Ans = equal_range(_Keyval);
IRO>>> size_type _Num = 0;
IRO>>> _Distance(_Ans.first, _Ans.second, _Num);
IRO>>> return (_Num);
IRO>>> }
IRO>>>
IRO>>>что мы тут видем, equal_range -> два find.
IRO>>>Distance!! может для когото секрет, что итерация у std::map это совсем не константная операция.
_DA>>Осталось только сказать, что в мэпе всегда в интервале будет максимум один элемент, и никто не запрещал автора реализовать count для map более эффективно.
Одна итерация, так одна от begin -> end ^^
начнем с того что сама функция count вообще както глупо выглядит
_DA>В stlport это выглядит так: _DA>
_DA>Ленивые.. А можно ведь сделать лучше.
наверное в stl от мелких, идет впервую очередь обощеность кода (минимум), и поэтому база для map и для multimap идет одна, а в stlport просто выжимают соки.
в любом случаее лучше count не пользоватся, как по мне в map это рудимент от multimap
Здравствуйте, IROV.., Вы писали:
IRO>Одна итерация, так одна от begin -> end ^^
Просто в N раз никакого замедления не будет, максимум в 2 из-за ненужного вызова equal_range.
IRO>начнем с того что сама функция count вообще както глупо выглядит
Согласен, но она делает именно то, что часто надо, хоть и в кривой форме.
_DA>>В stlport это выглядит так: _DA>>
_DA>>Ленивые.. А можно ведь сделать лучше. IRO>наверное в stl от мелких, идет впервую очередь обощеность кода (минимум), и поэтому база для map и для multimap идет одна, а в stlport просто выжимают соки.
А кому нужна эта конкретная обобщенность кроме самих разработчиков stl? Мне от stl часто нужна скорость.
IRO>в любом случаее лучше count не пользоватся, как по мне в map это рудимент от multimap