Из вашего требования кажется, что вам не нужна структура данных карты, но она может быть задана или что-то очень простое.
Я думаю, что структура вроде этой std :: map может вам помочь. Boost :: any сможет хранить что угодно, но предостережение заключается в том, что вам нужно знать, что тип значения должен прочитать его обратно.
Ключ - это строка, и, следовательно, она также может быть выражением регулярного выражения. С этой структурой вам понадобится два проходных алгоритма:
std::map<std::string, boost::any> _map;
if (_map.find(key) != _map.end)
{
// exact match
}
else
{
// Have to do sequential regex (use boost::regex) matching
}
Поскольку оценка регулярных выражений во время выполнения может быть дорогостоящей, вы можете использовать std :: vector>, так что для шаблонов регулярных выражений вы сохраняете скомпилированное регулярное выражение в одном из полей.
Может быть полезно дать больше информации о том, чего вы хотите достичь, так как это может помочь выбрать правильную структуру данных и алгоритм поиска.