⑴ Linux下C++讀取文件去重的問題
#include<fstream>
#include<vector>
#include<string>
#include<algorithm>
#include<iostream>
#include<sstream>
classdata_t{
public:
data_t():val(5){}
std::string&operator[](intconsti){
returnval[i];
}
std::stringconst&operator[](intconsti)const{
returnval[i];
}
private:
std::vector<std::string>val;
};
template<inti>
structcmp1{//用於sort函數
booloperator()(data_tconst&a,data_tconst&b)const{
returna[i]<b[i];
}
};
template<inti>
structcmp2{//用於unique函數
booloperator()(data_tconst&a,data_tconst&b)const{
returna[i]==b[i];
}
};
intmain(){
std::ifstreamistr("input.txt");
if(!istr){
std::cerr<<"文件打開失敗 ";
return__LINE__;
}
typedefstd::vector<data_t>vector_t;
vector_tdata;
//讀取文件
std::stringline;
intline_num=0;
while(getline(istr,line)){
++line_num;
data_ttmp_data;
std::istringstreamtmp_str(line);
inti=0;
for(;i!=5;++i){
if(!getline(tmp_str,tmp_data[i],' ')){
std::cerr<<"在第"<<line_num<<"行發生錯誤 ";
}
}
if(i==5){//該行讀取成功
data.push_back(tmp_data);
}
}
//按關鍵字1去重
std::sort(data.begin(),data.end(),cmp1<0>());
vector_t::iteratorlast=std::unique(data.begin(),data.end(),cmp2<0>());
//按關鍵字2去重
std::sort(data.begin(),last,cmp1<1>());
last=std::unique(data.begin(),last,cmp2<1>());
data.erase(last,data.end());
//輸出到另一個文件
std::ofstreamostr("output.txt");
if(!ostr){
std::cerr<<"文件打開失敗 ";
return__LINE__;
}
for(inti=0;i!=data.size();++i){
for(intj=0;j!=5;++j){
ostr<<data[i][j]<<" ";
}
ostr<<" ";
}
return0;
}
輸入文件為input.txt,樣例:
111222333444555
111222333444555
1111222333444555
1111222333444555
11111222333444555
11111222333444555
輸出到output.txt,樣例:
111222333444555
⑵ 一個arraylist,往裡面add值的時候,遇到重復就不要添加,怎麼做
可以使用set做媒介,先將需要加入的數據存入set後再從set存入list。
如圖所示
Set和List的區別
1. Set 介面實例存儲的是無序的,不重復的數據。List 介面實例存儲的是有序的,可以重復的元素。
2. Set檢索效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變<實現類有HashSet,TreeSet>。
3. List和數組類似,可以動態增長,根據實際存儲的數據的長度自動增長List的長度。查找元素效率高,插入刪除效率低,因為會引起其他元素位置改變<實現類有ArrayList,LinkedList,Vector>。
⑶ list和set的區別
在Java編程中,List和Set是兩種常見的集合類型,它們各有特色。首先,List是可重復的,允許存儲元素出現多次,例如ArrayList、Vector和LinkedList都實現了List介面,它們的特點是元素有序,適合存儲單列數據,允許數據重復。相反,Set是不可重復的集合,主要由HashSet和TreeSet實現,這意味著其中的元素是唯一的,這使得Set在查找和去重操作上更為高效。
其次,List和Set在數據結構上有所區別。List更像是有序的數據序列,元素的插入和刪除會影響其順序,而Set則更像是鍵值對的存儲,以鍵(key)為唯一標識,值(value)可以有重復,但鍵是不允許重復的。因此,如果你需要保持元素的唯一性和順序,可以選擇List;如果關注的是去重和快速查找,Set則更為合適。