[英]Segmentation fault:secondary sort in SET C++11
我正在嘗試根據名為“ set_type”的數據結構中設置的位數來進行二級排序,這不過是uint64_t的typedef。 可能出什么問題了? 同樣,如果刪除語句return(n1> n2),則代碼將完美執行。 但是,我想以雙精度值的升序和SET_TYPE中設置的位數的降序存儲SET中的節點。
struct setNode {
std::pair<double,set_type> data;
};
unsigned int bitCount (set_type value) {
unsigned int count = 0;
while (value > 0) { // until all bits are zero
if ((value & 1) == 1) // check lower bit
count++;
value >>= 1; // shift bits, removing lower bit
}
return count;
}
struct CompClass {
bool operator() (const setNode& lhs, const setNode& rhs) const
{
if (lhs.data.first == rhs.data.first) {
int n1 = bitCount(lhs.data.second);
int n2 = bitCount(rhs.data.second);
return n1 > n2;**//Statement causing error**
}
return lhs.data<rhs.data;
}
};
您的問題不完整。 您沒有考慮set_type的定義。 將來,在形成問題時,請創建最少的自包含程序。 除了其他方面,創建最小程序通常會使您了解問題所在。
此答案中的所有其他內容都是純猜測。
首先,我敢打賭,比較線不是唯一的斷斷續續。 通過不經過優化就編譯程序並在調試器中運行它很容易檢查。 我猜測一旦刪除比較,編譯器就會優化所有內容,這就是為什么刪除該行時它不會崩潰的原因。
其次,我敢肯定問題在於set_type的定義內。 您可能忽略了三個規則 。 許多人忘記了C ++類具有默認的復制構造函數,除非您明確禁用它。
如果這些都不能回答您的問題,請創建一個最小的編譯示例並發布一個新問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.