假如set中存放string指針,想當然可能會如此寫:
但是在定義setPtr時,使用了默認的less<string*>仿函數,即插入元素的時候比較的是指針,並非指針內容,因此,應該自定義比較類型函數
定義應該改爲:std::set<std::string*, StringPtrlLess> setPtr;這樣做了之後,比較順序就對了。
但是呢,std::copy(setPtr.begin(), setPtr.end(), std::ostream_iterator<string>(std::cout, "/n"));不能用,因爲ostream_iterator<string>接受string類型,但是傳給它的卻是string*。可以試試解引用:
完整代碼如下: