2
我一直在編碼圖算法,我想出了這個問題。在C++ 11 我試圖創建一個結構如下圖所示,C++函數重載「常量」
struct edges{
int u , v , w ;
edges(){}
edges(int _u , int _v , int _w) {
u = _u , v = _v , w = _w ;
}
bool operator < (edges & r) {
return w < r.w ;
}
};
所以,我寫了這個代碼,它編譯成功。 但是,當我打電話的std ::排序()功能類似下面,
sort(arr , arr + M) ; // here arr is an array of edges with M elements
然後我得到一個指向stl_algo.h行數編譯錯誤。我從stl_algo.h中添加部分代碼,
/// This is a helper function...
template<typename _RandomAccessIterator, typename _Tp>
_RandomAccessIterator
__unguarded_partition(_RandomAccessIterator __first,
_RandomAccessIterator __last, const _Tp& __pivot)
{
while (true)
{
while (*__first < __pivot) // 2242 number line
++__first;
--__last;
while (__pivot < *__last)
--__last;
if (!(__first < __last))
return __first;
std::iter_swap(__first, __last);
++__first;
}
}
那麼,我在互聯網上找到解決方案,並得到一個。我有常量關鍵詞中包含重載運營商,
struct edges{
int u , v , w ;
edges(){}
edges(int _u , int _v , int _w) {
u = _u , v = _v , w = _w ;
}
bool operator < (const edges & r) const {
return w < r.w ;
}
};
我的問題是,爲什麼我有「常量」關鍵字重載運營商,如果我打電話的std :: sort()函數?
@SamVarshavchik我在標準中找不到任何這樣的要求。最接近它是'假設comp不會通過解引用迭代器應用任何非常量函數。'它看起來像一個實現缺陷,'__ pivot'被設置爲'const'。 –
什麼編譯器/操作系統?另外,'arr'是什麼?請提供[mcve]。 – Barry
編譯g ++ 11和OS是debian linux(ubuntu) –