У меня есть несколько строк и их битовых эквивалентов. Мне нужно иметь возможность искать эквиваленты в обоих направлениях, то есть " str to bitset " и " bitset to str ". Я считаю, что boost-bimap был бы подходящим контейнером для этой работы.
Мне удалось заставить его работать со строками и целыми числами, но мой bimap string / bitset не компилируется. Я использую VS2019 с последней версией буста.
Целочисленный пример работает:
#include <boost/bimap.hpp>
#include <string>
#include <iostream>
int main()
{
typedef boost::bimap<std::string, int> bimap_str_int_t;
bimap_str_int_t bimap1;
bimap1.insert(bimap_str_int_t::value_type("A", 1));
std::cout << bimap1.left.at("A") << '\n'; //prints 1
std::cout << bimap1.right.at(1) << '\n'; // prints A
}
Не удается скомпилировать пример Bitset:
#include <boost/bimap.hpp>
#include <string>
#include <iostream>
#include <bitset>
int main()
{
typedef std::bitset<3> bitset_t;
typedef boost::bimap<std::string, bitset_t> bimap_str_bitset_t;
bimap_str_bitset_t bimap2;
bitset_t bits{ "010" };
bimap2.insert(bimap_str_bitset_t::value_type("A", bits));
std::cout << bimap2.left.at("A") << '\n';
std::cout << bimap2.right.at(bits) << '\n';
}
В примере с набором битов создается следующееошибка компилятора:
boost_test.cpp (20): сообщение: см. ссылку на создание экземпляра шаблона класса 'boost :: bimaps :: bimap'
Я не являюсьуверен, как это исправить, и буду очень признателен за любые подсказки.