Информация об изменениях

Сообщение Re: const char* в качестве ключа для std::map от 04.08.2017 16:42

Изменено 04.08.2017 16:43 Alexander G

Re: const char* в качестве ключа для std::map
Здравствуйте, niXman, Вы писали:

X>тут type::register() зовется единожды при запуске программы, но а type::invoke() множество раз.


Используй std::vector<std::string>, отсортируй после всех register, но перед первым invoke, ищи через lower_bound, передавая свой компазатор:
struct Comparator 
{
    bool operator()(cosnt std::string& s1, const char* s2) const { return std::strcmp(s1.c_str(), s2) < 0; }
    bool operator()(const char* s1, const std::string& s2) const { return std::strcmp(s1, s2.c_str()) < 0; }
};
Re: const char* в качестве ключа для std::map
Здравствуйте, niXman, Вы писали:

X>тут type::register() зовется единожды при запуске программы, но а type::invoke() множество раз.


Используй std::vector<std::string>, отсортируй после всех register, но перед первым invoke, ищи через свободную функцию std::lower_bound, передавая свой компазатор:
struct Comparator 
{
    bool operator()(cosnt std::string& s1, const char* s2) const { return std::strcmp(s1.c_str(), s2) < 0; }
    bool operator()(const char* s1, const std::string& s2) const { return std::strcmp(s1, s2.c_str()) < 0; }
};