У меня есть std :: set из std :: pairs, а вторая пара строка. Я хочу проверить, существует ли пара в наборе.std :: set <std :: pair <size_t, std :: string>> :: find(), без построения строковой копии
std::set< std::pair<size_t, std::string> > set_; bool exists(size_t x, const std::string& s) { std::set< std::pair<size_t, std::string> >::iterator i = set_.find(std::make_pair(x, s)); // copy of s is constructed by make_pair! return i != set_.end(); }
Я называю эту функцию часто (да, очень часто), поэтому я хочу, чтобы выполнить эту проверку, не создавая временную копию строки. Есть ли способ сделать это так же просто и красно, как то, что у меня есть здесь, но которое не создает временную копию строки? Любое решение с контейнерами STL или Boost было бы неплохо.
Вы делаете это неправильно. Напишите код, который прямолинейный, чистый и работает. Затем пройдите по линии, когда вы закончите, * профиль * ваше приложение и оптимизируйте то, что говорят результаты, медленные; не догадаться. – GManNickG
Здесь много советов, что я не должен беспокоиться о производительности этой функции, пока у меня не появится доказательство того, что эта функция вызывает проблемы с производительностью, и я просто хочу упомянуть любого, кто читает эту запись, что это чудесно хороший совет в целом , Просто не в этом конкретном случае. –
Скопировать строку не так дорого, как вы думаете. Сначала напишите чистый код, чтобы оптимизировать его, когда вы докажете, что это точка задувания. –