日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从STL中查找、统计和过滤重复(相同)的数据

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从STL中查找、统计和过滤重复(相同)的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:https://blog.csdn.net/qq_40969467/article/details/90758281

https://blog.csdn.net/qq_23350817/article/details/100097881

點擊查看更多通信與專業知識

一、實現從vector中過濾重復的數據

0、前言


相信有很有種情況下面要在vector下過濾掉重復的數據就比如在數組中需要過濾重復數據一樣重要一般常用的方法,好像還是在學校中教的,進行匹配一遍,然后再進行插入既然有了STL容器,那么我們可以完全拋棄上面提到的一般方法,把效率提高至少1倍。


1、思路


map也是我們常用的一種容器,他主要的保存方式是,也就是通過key來進行索引,而且這個key是不重復的,那么在我們過濾的前提下,map就是成敗的關鍵了,看看如何把它用好


2、容易陷入的錯誤


a、一想到容器,很容易想到使用迭代器(iterator),但是對于map,加入數據量大的時候,進行iterator的操作很慢很慢!
b、容易想到,先把數據都插入到map中,再最后直接在寫入vector中,其實這樣又回到了a中


3、流程分析


假設我們要存放N多的數據(假設是海量的),那么我們需要避免對map進行iterator的操作(很慢很慢!)
于是在數據插入的時候,我先去從map中find一下,加入map中并不存在這個key,那么我們放心的插入到map中,同時插入到vector中。總之,每一次想到要插入vector我都想到map.find、map.insert,那么最終的vector就是不存在重復的,也同時避免了在map中使用迭代器(iterator)。

4.分析

map查找某個元素方便,但遍歷是弱項,所以用來充當過濾器; vec查找某個元素不方便,但遍歷很快,用來儲存很適合;

二、計算stl中重復元素個數的函數

可以使用count計算元素中重復元素個數

#include <iostream> #include <bitset> #include <vector>using namespace std;int main(int argc, char* argv) {bitset<8> bt;bool ret = bt.any();if (ret) {cout << "True" << endl;}else {cout << "False" << endl;}vector<int> vec{ 1, 2, 3, 1, 2, 2, 2, 3, 3, 3, 3 };cout << count(vec.begin(), vec.end(), 3) << endl;while (1);return 0; }

count在某些場合可以替換find使用。但是如果需要找到查找數據的位置時則必須使用find函數,count更強調查找元素出現的個數。
當如果需要清除容器中重復元素的時候,使用unique。很多場合就是先count計算是否有重復元素,如果有就先unique刪除重復元素,然后使用sort對元素進行排序。
?

總結

以上是生活随笔為你收集整理的从STL中查找、统计和过滤重复(相同)的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。