#include <cstdlib> #include <iostream> #include <algorithm> #include <vector> #include <string> #include <fstream> #include <iterator> using namespace std; typedef struct _NODE { string str; int id; _NODE(string str, int id) : str(str), id(id){}; friend ostream& operator <<(ostream &os, const _NODE &node) { return os << "(" << node.id << ", " << node.str <<")" << endl; } /*friend bool operator==(const _NODE &nod, const _NODE &node) { return nod.str == node.str; }*/ }NODE; class dicOrder { public: bool operator()(const NODE &nod, const NODE &node) { return nod.str < node.str; } }; class checkDuplic { public: bool operator()(const NODE &nod, const NODE &node) { return ((nod.str) == (node.str)); } }; int main(int argc, char *argv[]) { ifstream input("input.txt"); vector<NODE> node; string eachWord; cout << "words in file is: " << endl; while(input >> eachWord) { NODE temp(eachWord, rand() % 100); node.push_back(temp); cout << temp; } sort(node.begin(), node.end(), dicOrder()); vector<NODE>::iterator end_unique = unique(node.begin(), node.end(), checkDuplic()); if(end_unique == node.end()) cout << "there is no duplicated words" << endl; else { node.erase(end_unique, node.end()); cout << "the remind non duplicated words are: " << endl; ostream_iterator<NODE> os(cout, ""); copy(node.begin(), node.end(), os); cout << endl; } system("PAUSE"); return EXIT_SUCCESS; } 注意:在使用unique()之前一定要对容器元素进行排序, 因为unique()只是去比较相邻元素间是否有重复的...