簡體   English   中英

使用迭代的問題 map C++

[英]problem with using Iterating over map C++

我不確定為什么這不是有效的迭代器我的 function 看起來像這樣:

int Directory::getSizeOfFiles() const {
    std::map<std::string, int>::iterator it = m_files.begin();
    int total = 0;

    while (it != m_files.end()) {
        total += it->second();
        it++;
    }
    return total;
}

m_files 定義為: std::map<std::string, int> m_files; 在目錄 class 中

為什么它會給我錯誤

error C2440: 'initializing': cannot convert from 'std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,int>>>>' to 'std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const std::string,int>>>>'

visual studio 顯示:在此處輸入圖像描述

我希望這個迭代器能工作。 我想我可以用另一種方式循環 map 但我不確定為什么我所做的不起作用。

m_files必須是該方法的 class 的成員。

現在,請注意這個 class 方法:

int Directory::getSizeOfFiles() const {

堅持在它末尾的const有點重要。

這意味着,就此方法而言,所有 class 成員都是const

如果m_filesconst ,那么

m_files.begin();

返回一個const_iterator ,而不是一個iterator 因此聲明必須是:

    std::map<std::string, int>::const_iterator it = m_files.begin();

現在,如果您返回 go,查看編譯器的錯誤消息,真正、非常努力地眯着眼睛,您可能能夠弄清楚錯誤消息的文本所表達的細節。

您可能還想知道您用來學習 C++ 的 C++ 教科書似乎已經過時,而且大部分都已過時。 當前的 C++ 標准提供了更簡潔的容器迭代方式,可以自動處理諸如此類的小細節。 您可能想考慮一個等效的、更短的、更清潔的和更簡單的替代方案,您同意嗎?

int total=0;

for (const auto &[key, value]:m_files)
   total += value;

return total;

您應該能夠在涵蓋當前 C++ 標准的每本 C++ 教科書中找到對這種最新語法的完整描述。

暫無
暫無

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

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