Да, но зато это в отличие от предыдущей версии делает то, что просил автор топика.
Если нужно, чтобы поиск был только один раз то нужно сделать, как уже сказали раньше, вот так:
Здравствуйте, _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
Здравствуйте, _DAle_, Вы писали:
_DA>Здравствуйте, IROV.., Вы писали:
IRO>>Одна итерация, так одна от begin -> end ^^ _DA>Просто в N раз никакого замедления не будет, максимум в 2 из-за ненужного вызова equal_range.
2 это тоже N ^^ + хвостик от Distance
_DA>А кому нужна эта конкретная обобщенность кроме самих разработчиков stl? Мне от stl часто нужна скорость.
"Вы просто не умеите их готовить" (с)
count не совсем отображает мысль "есть ли такой обьект", то что мелкие не сделали специализацию под случай Unique Associative Container, ну что я прощаю ^^, я не буду использовать изврат, и надеятся на обьективность.
а как разработчик я только поддержу, меньше кода, меньше багов, и меньше единиц внимания.
Здравствуйте, IROV.., Вы писали:
B>>Может быть будут аргументы? 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.
В случае multimap — да, в случае map — в нормальных реализациях find только один.
IRO>Distance!! может для когото секрет, что итерация у std::map это совсем не константная операция.
Да, итерация по дереву не самая дешевая операция, но опять же не для данного случая (т.е. для случая map).
Подводя итог.
Я, в принципе, согласен с аргументами против count, и сам использую find. Но варианты с count приходилось встречать, да и в драфте C++0x этот метод не объявлен как deprecated — так что этот вариант вполне имеет право на жизнь.