Имея парукак найти, если его часть какой-то пары в карте? - PullRequest
1 голос
/ 09 июля 2011

У нас есть пара строк, например, такая пара Accept-Language : RU ,, и мы ищем по карте, например, заголовки HTTP-запроса.Все, что нам нужно знать, есть ли такая пара на карте или нет - значение bool.Что делать с мягким поиском, что означает, что нам не нужно находить точно такую ​​же пару, но пара, подобная Accept-Language : ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4, также является для нас допустимой парой, и если она существует, мы можем подумать, что обнаружили, что наша карта содержит нашу пару.Как сделать функцию для выполнения такого поиска в C ++?

1 Ответ

3 голосов
/ 09 июля 2011

Прежде всего, если вы используете map, вы не можете иметь несколько записей с одним и тем же ключом. Например. вы не можете иметь и Accept-Language : RU, и Accept-Language : ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4, потому что они имеют одинаковый ключ `Accept-Language '. Возможно, в вашем случае вам следует использовать вектор пар или мультикарту.

Далее ваш вопрос состоит из 2 частей:

  1. Как проверить, является ли какой-либо элемент (например, string или pair) соответствует шаблону.
  2. Предполагая, что у вас есть такая проверка, как применить это к каждый элемент в контейнере.

Решения для каждой части:

  1. Вы можете реализовать функцию, которая принимает string или pair (зависит от типа контейнера и выбранного вами сохраненного элемента) и проверяет, соответствует ли она вашим критериям. Вы можете найти такие функции, как string :: find_first_of , которые будут полезны в этом отношении. Библиотеки regex могут быть еще более полезными, хотя они не являются частью STL.
  2. Вы можете применить эту функцию к каждому элементу вашего контейнера, используя алгоритм find_if .
...