【C++】map 自動排序、不用迴圈連續刪除元素

前言:

  當時在寫專案時,遇到了一個隨機插入後,還需要按照順序排序的問題,然而當時想到用  C++ 中的 map 來存放資料,然而隨機插入已經解決了,那排序呢? 當時還不了解 map 如何使用,然而便上網做了一番功課,在此跟大家分享解答。

程式範例:

map 自動排序:

  在經過一查詢後,發現在 map 本身即會按照 Key 排序。為了驗證此事,本人寫了以下程式碼進行測試:

map 宣告

std::map <int, int> testMap;
testMap.insert (std::make_pair (100, 100));
testMap.insert (std::make_pair (50, 50));
testMap.insert (std::make_pair (125, 125));
testMap.insert (std::make_pair (5, 5));

連續印出 map 中值

std::map <int, int>::iterator itBegin = testMap.begin ();		// 取得 map 最開始 Iterator
for (; itBegin != testMap.end (); ++itBegin)
	std::cout << "key=" << itBegin->first << ", value=" << itBegin->second << std::endl;			// 顯示map所有元素
結果:
key=5, value=5
key=50, value=50
key=100, value=100
key=125, value=125

map 刪除連續個數:
(範例從第一個元素開始刪除)

  在某些情況下,我們預刪除 map 中,指定位置的資料,然而絕大部分的方法,皆是使用 for + if , 進行尋訪刪除,但是在這個情況下,我們已經知道我們預刪除的資料區間,然而還使用 for 迴圈,從第一筆資料開始尋訪、刪除,不是非常蠢且耗效能嗎?

  因此在這裡,本人採用了指標 (Iterator) 的作法,直接針對兩指標區間的數值進行刪除,這樣不僅省效能,程式碼也不會看起來這麼蠢。那我們廢話不多說,直接看範例吧!

(以下程式碼引用 “map 自動排序“中 Map宣告)

設定 “預刪除” 元素之 “起始位置”

std::map <int, int>::iterator itBegin = testMap.begin();		// 取得 map 最開始 Iterator
std::advance (itBegin, 0);										// 從開頭 +0 個元素開始刪

設定 “預連續刪除” 之元素個數

// 設定連續刪除個數
std::map <int, int>::iterator itToDeleteCount = itBegin;		// Iterator 指向 map 起始刪除元素
std::advance (itToDeleteCount, 2);								// Iterator 指向 map 起始刪除元素 + 2

刪除指定 iterator 區間之元素

testMap.erase (itBegin, itToDeleteCount);						// 連續刪除map 2個元素 (size = 1~2)

印出 map 中剩餘的資料

itBegin = testMap.begin ();
for (; itBegin != testMap.end (); ++itBegin)
	std::cout << "key=" << itBegin->first << ", value=" << itBegin->second << std::endl;			// 顯示剩下元素
結果:
key=100, value=100
key=125, value=125

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

six + 4 =