/* The following code example is taken from the book
* "The C++ Standard Library - A Tutorial and Reference, 2nd Edition"
* by Nicolai M. Josuttis, Addison-Wesley, 2012
*
* (C) Copyright Nicolai M. Josuttis 2012.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
#include <iostream>
#include <iomanip>
#include <map>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;
// function object to compare strings
// - allows you to set the comparison criterion at runtime
// - allows you to compare case insensitive
class RuntimeStringCmp
{
public:
// constants for the comparison criterion
enum cmp_mode {normal, nocase};
private:
// actual comparison mode
const cmp_mode mode;
// auxiliary function to compare case insensitive
static bool nocase_compare(char c1, char c2)
{
return toupper(c1) < toupper(c2);
}
public:
// constructor: initializes the comparison criterion
RuntimeStringCmp(cmp_mode m = normal) : mode(m)
{
}
// the comparison
bool operator()(const string& s1, const string& s2) const
{
if (mode == normal) {
return s1 < s2;
} else {
return lexicographical_compare(s1.begin(), s1.end(),
s2.begin(), s2.end(),
nocase_compare);
}
}
};
// container type:
// - map with
// - string keys
// - string values
// - the special comparison object type
typedef map<string, string, RuntimeStringCmp> StringStringMap;
// function that fills and prints such containers
void fillAndPrint(StringStringMap& coll);
int main()
{
// create a container with the default comparison criterion
StringStringMap coll1;
fillAndPrint(coll1);
// create an object for case-insensitive comparisons
RuntimeStringCmp ignorecase(RuntimeStringCmp::nocase);
// create a container with the case-insensitive comparisons criterion
StringStringMap coll2(ignorecase);
fillAndPrint(coll2);
}
void fillAndPrint(StringStringMap& coll)
{
// insert elements in random order
coll["Deutschland"] = "Germany";
coll["deutsch"] = "German";
coll["Haken"] = "snag";
coll["arbeiten"] = "work";
coll["Hund"] = "dog";
coll["gehen"] = "go";
coll["Unternehmen"] = "enterprise";
coll["unternehmen"] = "undertake";
coll["gehen"] = "walk";
coll["Bestatter"] = "undertaker";
// print elements
cout.setf(ios::left, ios::adjustfield);
for (const auto& elem : coll) {
cout << setw(15) << elem.first << " "
<< elem.second << endl;
}
cout << endl;
}
没有合适的资源?快使用搜索试试~ 我知道了~
C++标准库(第2版)STL 源码
共293个文件
cpp:258个
hpp:34个
readme:1个
4星 · 超过85%的资源 需积分: 39 98 下载量 100 浏览量
2018-06-11
09:48:36
上传
评论
收藏 217KB RAR 举报
温馨提示
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
资源推荐
资源详情
资源评论
收起资源包目录
C++标准库(第2版)STL 源码 (293个子文件)
mapcmp1.cpp 3KB
refsem1.cpp 3KB
sort1.cpp 3KB
moneypunct.cpp 2KB
sort1.cpp 2KB
sorted1.cpp 2KB
regex1.cpp 2KB
chrono2.cpp 2KB
vector1.cpp 2KB
setcmp1.cpp 2KB
forwardlist1.cpp 2KB
loc2.cpp 2KB
sequence2.cpp 2KB
sum1.cpp 2KB
thread1.cpp 2KB
regex2.cpp 2KB
string1.cpp 2KB
async3.cpp 2KB
sharedptr3.cpp 2KB
gslice1.cpp 2KB
list1.cpp 2KB
map2.cpp 2KB
nthelement1.cpp 2KB
condvar2.cpp 2KB
set1.cpp 2KB
enableshared1.cpp 2KB
sharedfuture1.cpp 2KB
timeget.cpp 2KB
bind1.cpp 2KB
lambda6.cpp 2KB
promise1.cpp 2KB
multimap1.cpp 2KB
dist1.cpp 2KB
searchn1.cpp 2KB
complex1.cpp 2KB
fstream1.cpp 2KB
innerproduct1.cpp 2KB
move1.cpp 2KB
multiset1.cpp 2KB
indirectarray1.cpp 2KB
timeput.cpp 2KB
transform2.cpp 2KB
rotate2.cpp 2KB
slice1.cpp 2KB
fill1.cpp 2KB
replace2.cpp 2KB
ispermutation1.cpp 2KB
hashfunc2.cpp 2KB
numget.cpp 2KB
stringiter1.cpp 2KB
algo1old.cpp 2KB
search2.cpp 2KB
refwrap1.cpp 2KB
minmax1.cpp 2KB
issorted1.cpp 2KB
mismatch1.cpp 2KB
stringnumconv1.cpp 2KB
find1.cpp 2KB
regextokeniter1.cpp 2KB
adjacentfind1.cpp 2KB
async1.cpp 2KB
bind1.cpp 2KB
random2.cpp 2KB
weakptr2.cpp 2KB
findof1.cpp 2KB
accumulate1.cpp 2KB
prime1.cpp 2KB
weakptr1.cpp 2KB
reviter3.cpp 2KB
remove2.cpp 2KB
add1.cpp 2KB
lexicocmp1.cpp 2KB
unique1.cpp 2KB
inserter1.cpp 2KB
remove2.cpp 2KB
hashfunc1.cpp 2KB
transform1.cpp 2KB
unordset1.cpp 2KB
partialsort2.cpp 2KB
sum2.cpp 2KB
valarray1.cpp 1KB
sharedptr1.cpp 1KB
string2.cpp 1KB
limits1.cpp 1KB
copy1.cpp 1KB
random1.cpp 1KB
partialsort1.cpp 1KB
bounds1.cpp 1KB
unique2.cpp 1KB
permutation1.cpp 1KB
chrono1.cpp 1KB
itercategory1.cpp 1KB
find2.cpp 1KB
tuple1.cpp 1KB
findend1.cpp 1KB
equal1.cpp 1KB
algo1.cpp 1KB
regexiter1.cpp 1KB
wstring2utf8.cpp 1KB
async2.cpp 1KB
共 293 条
- 1
- 2
- 3
资源评论
- cs2522019-08-14和这本书配套的,没啥问题
- 简单tl2019-05-22垃圾资源,根本无实现源码,只有应用示例。
- aidelong2018-10-30源代码资源,可以参考,谢谢分享
yake_163
- 粉丝: 3
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#实现桌面提醒工具项目
- SwiftLanguageWeather.zip
- 风机变桨控制基于FAST与MATLAB SIMULINK联合仿真模型非线性风力发电机的 PID独立变桨和统一变桨控制下仿真模型,对于5WM非线性风机风机进行控制 链接simulink的scope出转速
- Spring+Spring MVC+MyBatis实现敛书网
- Scrapy框架-xpath爬取豆瓣电影top250电影信息
- python俄罗斯方块游戏
- 正点原子RK3588平台,运行在Android14的realtek 的wifi驱动(rtl8733bu)
- python贪吃蛇小游戏
- 超级有趣的表白代码圣诞树源代码100%好用.zip
- python定时清理朝超出容量限制的日志任务
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功