簡體   English   中英

如何在 std::map 中使用 arma::vec 作為鍵

[英]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>' 轉換為 'bool' 返回 {返回 __x < __y; }

要在std::map使用任何東西作為鍵,您需要“任何東西”來實現operator< 該運算符需要對元素實施嚴格的弱排序

如果您正在使用的類當前沒有實現這樣的運算符,則它不能是映射鍵。 解決方案是添加/實現這樣的運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM