如何使用 arma::vec 作为 std::map 中的键
How to use arma::vec as key in std::map
我已经实现了以下代码来更新马尔可夫模型,但编译器不允许我使用犰狳向量作为 std::map 中的键。有什么想法吗?
typedef std::vector<std::map<arma::vec, int>> vmaps_t;
struct markov
{
uint8_t maxord;
vmaps_t m_maps;
std::vector<char> m_chars;
markov(uint8_t maxord)
{
m_maps = vmaps_t(maxord);
}
void update(const arma::vec &v)
{
for (size_t ord = 0; ord < maxord; ord++)
{
if (v.n_elem > ord)
{
if (std::find(m_chars.begin(), m_chars.end(), v.back()) == m_chars.end()) //just to tell elem not in vect...
{
m_chars.push_back(v.back());
}
arma::vec seq = v.rows(v.n_rows - ord, v.n_rows - 1);
if (m_maps[ord].find(seq) == m_maps[ord].end())
{
m_maps[ord][seq] = 0;
}
m_maps[ord][seq]++;
}
}
}
};
错误:无法转换 'arma::enable_if2、arma::Col、arma::glue_rel_lt> >::result {aka const arma::mtGlue、arma::Col、 arma::glue_rel_lt>' 到 return 中的 'bool'
{ return __x < __y; }
要使用 任何东西 作为 std::map
中的键,您需要 "anything" 来实现 operator<
。该运算符需要为元素实施严格的弱排序。
如果您正在使用的 class 当前没有实现这样的运算符,则它不能是映射键。解决办法就是add/implement这样的运算符。
我已经实现了以下代码来更新马尔可夫模型,但编译器不允许我使用犰狳向量作为 std::map 中的键。有什么想法吗?
typedef std::vector<std::map<arma::vec, int>> vmaps_t;
struct markov
{
uint8_t maxord;
vmaps_t m_maps;
std::vector<char> m_chars;
markov(uint8_t maxord)
{
m_maps = vmaps_t(maxord);
}
void update(const arma::vec &v)
{
for (size_t ord = 0; ord < maxord; ord++)
{
if (v.n_elem > ord)
{
if (std::find(m_chars.begin(), m_chars.end(), v.back()) == m_chars.end()) //just to tell elem not in vect...
{
m_chars.push_back(v.back());
}
arma::vec seq = v.rows(v.n_rows - ord, v.n_rows - 1);
if (m_maps[ord].find(seq) == m_maps[ord].end())
{
m_maps[ord][seq] = 0;
}
m_maps[ord][seq]++;
}
}
}
};
错误:无法转换 'arma::enable_if2、arma::Col、arma::glue_rel_lt> >::result {aka const arma::mtGlue、arma::Col、 arma::glue_rel_lt>' 到 return 中的 'bool' { return __x < __y; }
要使用 任何东西 作为 std::map
中的键,您需要 "anything" 来实现 operator<
。该运算符需要为元素实施严格的弱排序。
如果您正在使用的 class 当前没有实现这样的运算符,则它不能是映射键。解决办法就是add/implement这样的运算符。