2016-09-07 33 views
-6

我最近被給了一個面試問題,它有以下代碼。不幸的是,我沒有把它做對。有人能幫忙解釋一下代碼在做什麼,特別是註釋行嗎?這個C++代碼中插入了什麼值?

這是代碼。

#include <iostream> 
#include <set> 

struct C 
{ 
    bool operator()(const int &a, const int &b) const 
    { 
     return a % 10 < b % 10; 
    } 
}; 

int main() 
{ 
    std::set<int> x({ 4, 2, 7, 11, 12, 14, 17, 2 }); 
    std::cout << x.size(); 
    std::set<int, C> y(x.begin(), x.end()); // Not sure what is inserted in the set 
    std::cout << y.size() << std::endl; 

    return 0; 
} 
+10

運行它並找出? – NathanOliver

+1

我預測'{11,2,4,7}'(我沒有運行這個例子,誠實)。 –

+2

http://ideone.com/8eL2f4我很親切 –

回答

3

運行時,x包含依次是:

2 4 7 11 12 14 17 

y保存順序:

11 2 4 7 

我的直覺是,set反向操作,以檢查是否相等(因爲set只包含唯一值)。因此只有a%10的唯一值存在。

+0

'set'不使用相等(如在'operator =='中),它使用等價,它被定義爲'!(a

+0

感謝您澄清,我實際上不知道'set'是如何檢查是否相等 –

+0

Thanks Igor,我想你只是給了我應該尋找的線索,該集合是由只存儲唯一的模10值的事實形成的。不要鏈接2和12與該自定義操作符相同的事實。 –