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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

9.为包含指针的关联容器指定比较类型

發(fā)布時(shí)間:2024/4/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 9.为包含指针的关联容器指定比较类型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有如下代碼:

std::set<std::string*> datas; datas.insert(new std::string("Anteater")); datas.insert(new std::string("Wombat")); datas.insert(new std::string("Lemur")); datas.insert(new std::string("Penguin"));

打印datas中的內(nèi)容:

for (auto* pData : datas) {std::cout << *pData << std::endl; }

希望輸出的內(nèi)容是按照字母順序排序,然后卻并非如此。

原因如下:

類型std::set,補(bǔ)全后其實(shí)際的類型為:
std::set, std::allocator>。
這里,排序準(zhǔn)則是std::less而非希望的按照字母順序排序的準(zhǔn)則std::less,它將按照std::string*的指針值進(jìn)行排序,而不是std::string的值進(jìn)行排序。

如果想讓std::string*數(shù)據(jù)在std::set中按照字母順序排序,必須編寫自己的排序準(zhǔn)則。排序準(zhǔn)則用在序列容器的定義中時(shí),語(yǔ)法要求其必須是個(gè)類型,不能是普通函數(shù)需要使用函數(shù)對(duì)象(函數(shù)子)。C++11中引入了Lambda表達(dá)式,它的返回值就是函數(shù)對(duì)象。

最新的類型聲明為:

auto sortFunc = [](const std::string* pLeft, const std::string* pRight) {return *pLeft < *pRight; ?}; std::set<std::string*, sortFunc> datas; ...

每當(dāng)你要?jiǎng)?chuàng)建包含指針的關(guān)聯(lián)容器時(shí),一定要記住,容器將會(huì)按照指針的值進(jìn)行排序。絕大多數(shù)情況下,這不會(huì)是你所希望的,所以你幾乎肯定要?jiǎng)?chuàng)建自己的函數(shù)對(duì)象作為該容器的比較函數(shù)。

總結(jié)

以上是生活随笔為你收集整理的9.为包含指针的关联容器指定比较类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。