std set的迭代器不能修改對應的元素

2022-07-02 18:18:10 字數 814 閱讀 2252

c++不長搞,每次搞都頻繁掉進陷阱裡。。。

std::setiset;

std::set::iterator it = iset.insert(4).first;

(*it)++; // error. 原因:std::set的迭代器不能修改對應的元素.

這是因為:

std::set的特點是:

1.        對於插入、刪除和查詢操作,

set保證其時間複雜度都是o(log n);

2.        set是乙個有序的、可以前向和後向遍歷的容器(雙向迭代器);

3.        set是乙個元素型別和比較函式可以配置的容器,但是一經配置,就不可更改;

4.        set的元素可以插入、刪除,但是不可更改。

set在任何時刻都是乙個有序的結構,而一旦破壞這個有序性,set可能表現出非預期的行為。為了保證set的概念完整性,c++stl厲

行規定了3和4兩個限制,在絕大部分情況下,這兩個限制是合理的。

但是,當我在set裡面存的是shared_ptr元素時, 根本無所謂有沒有序. 我就是要通過迭代器獲取元素的非const引用. 解決如下:

#include

#include

template

inline t & getstdsetelement(std::_rb_tree_const_iteratorstd_set_iterator)

int main()

C 直接修改std set元素的方法

元素在std set中構造後,如果需要查詢,則呼叫find成員函式,但是該方式有乙個致命的缺陷,就是返回的是乙個常指標,無法通過指標更改元素的值。這樣做也是有意義的,因為如果是int之類的元素,本身相當於鍵值,更改鍵值就破壞了原來紅黑樹的結構了。但是,有些情況下,我們自定義了一些資料結構,但是需要更...

如何在觸發器中修改物件結構

create or replace trigger test trigger before insert on test tab for each row declare local variables here begin alter sequence test seq maxvalue 1000...

Windchill 修改物件的建立者 修改者

因為需要呼叫ootb 的 wt.vc包下的一些受保護的方法,toolhelper 類必須放在wt.vc包下 wtpart part null 需要設定的物件,可以是任何有大版本的物件iterated wtprincipalreference principal null 需要設定的參與者物件 too...