簡體   English   中英

在stl容器中使用比較函數

[英]using comparison function in stl container

我為什么這樣做:

stable_sort(it1, it2, binary_function);

但不是這個:

priority_queue<type, vector<type>, binary_function> pq;

為什么我可以在第一種情況下使用函數,但在第二種情況下需要一個對象?

priority_queue是一個模板,它期望一個類型作為參數,其中binary_function是一個函數對象。

如果你看看std::stable_sort上的引用,你會看到你提供的binary_function也應該是一個函數對象......兩者之間沒有區別,除了可能在第二種情況下沒有正確的“強制轉換”或從函數轉換為適當的函數對象。

我相信這可能是因為*sort函數直接使用仿函數,因此如果函數地址在調用*sort函數時有效,它將在函數調用期間有效。 創建使用此作為數據成員的容器(實質上)時,您無法確定在容器對象的生命周期內函數引用是否會失效。 我知道這是一個松散的手工解釋,但它是我能想到的最好的。 也許在C ++中,對二進制函數的引用將被隱含地轉換為std::function的構造,以便該函數被“復制”並且沒有有效性問題。

我希望我現在沒有失去你...

暫無
暫無

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

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