簡體   English   中英

std :: map中的std :: pair以const的形式返回

[英]The std::pair in the std::map is returned as const

我的示例代碼是

class A
{
    int a = 0;
public:
    void setA(const int value)
    {
        a = value;
    }
};

std::map<std::string, std::set<A>> Map{{"A", {}}};
Map.rbegin()->second.rbegin()->setA(2);

我收到以下錯誤:“成員函數'setA'不可行:'this'參數的類型為'const A',但函數未標記為const”

我的問題是為什么rbegin()返回指向A的const指針? 還是為什么std:pair的第二個是std :: map中的const?

所有std::set元素都以const方式公開。 那是因為它們既是鍵又是值,並且如果您可以隨意修改鍵,那么您將破壞集合中的樹結構。

當前無法直接修改set元素 您將必須先刪除然后重新插入。

(這與封裝映射無關。)

基本上, rbegin()返回一個反向迭代器 ,該迭代器指向A類型的對象,該對象以const方式存儲在std::set中。

這種行為背后的原因很簡單:必須保護std::set免受存儲在其中的元素的意外更改。

您應該記住, std::set將其元素存儲在樹狀數據結構中,以確保快速搜索/插入/刪除操作。 std::set內部元素的可能更改可能導致錯誤的元素比較和數據結構損壞,這就是為什么所有迭代器均通過begin() / end()方法返回並且其類似物以const方式公開元素的原因。

暫無
暫無

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

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