map中結構體做關鍵字的注意事項

2022-05-16 21:15:36 字數 1073 閱讀 6392

序:

今天做一道題,由於遞迴函式比較噁心,如果用記憶化搜尋,資料範圍極大卻又用不全(二維陣列存的話直接炸)。所以決定乾脆使用stl::map儲存(反正有o2優化),但是執行insert的時候,編譯器卻莫名其妙的報錯,跳到stl的某個庫之中。一臉懵逼,弄了半天才搞明白原因。

結構體像這樣:

struct qi

qi(int a, int b):

x(a), y(b){}

};mapkongse;

插入語句是這樣的:

if(a > b) kongse.insert(map::value_type(m, f(a-b,b+b)+1));

else kongse.insert(map::value_type(m, f(a+a,b-a)+1));

編譯器報錯了,跳到了這裡:

/// one of the @link comparison_functors comparison functors@endlink.

templatestruct less : public binary_function<_tp, _tp, bool>

};

這是乙個名為「stl_function.h"的庫,看來是專門實現各種函式的庫。

仔細看這裡:

它返回了乙個bool型別的值,是通過 '<'實現的。看到這裡問題應該就很清楚了:我們的結構體根本就沒有定義<,如何能夠比較

再回想map是什麼,紅黑樹,是實現內部排序的容器,這也就不足為怪了。

所以解決方法很簡單,隨意定義乙個bool operator < (const & ..) const即可。

如:

bool operator < (const qi &a)const

如此問題就解決了。

箜瑟_qi 2017.05.07 19:37

結構體,關鍵字

一.關鍵字 static 修飾全域性靜態變數 作用範圍侷限於它的原始檔,即只有本檔案內的 才可以訪問它,變數名在其他檔案內不可見。修飾區域性靜態變數 侷限於特定函式,但出作用域並不釋放,在函式體內的靜態變數的值也能夠維持。修飾靜態函式 作用範圍僅限於它的原始檔,即只有本檔案內才能夠呼叫,函式名在其他...

結構體 struct關鍵字

多個資料組合在一起便是結構體,此時需要用到我們的關鍵字 struct 格式為 struct 需要定義的東西 如此時我們需要定義乙個學生的資訊 struct student 此時student這個資訊結構體我們就已經定義好了,如果定義的結構體中有多個資料,可以考慮定義巨集變數,便於修改維護 接著進行初...

typedef關鍵字與結構體,結構體指標

請移步原文 一 使用typedef定義結構體 typedef用來定義新的資料型別,通常typedef與結構體的定義配合使用。使用typedef的目的使結構體的表達更加簡練 所以說typedef語句並不是必須使用的 定義乙個名字為treenode的結構體型別 現在並沒有定義結構體變數,並不占用記憶體空...