《算法图解》chap5 散列表
Posted huangyilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《算法图解》chap5 散列表相关的知识,希望对你有一定的参考价值。
线索Cues | 笔记Notes |
|
一、散列表=散列函数+数组
二、
|
Codes | |
1 voted= 2 def check_voter(name): 3 #如果有人要投票,投过了就不给投,否则就让他们投 4 if voted.get(name): 5 #先判断有没有在voted里面,如果没有就存进去并且允许投票 6 7 print("kick them out") 8 else : 9 voted[name]=True 10 print ("let them vote!") 11 12 check_voter("tom") 13 check_voter("tom") 迭代器是跟容器紧密结合的,不同的容器,它的迭代器不同,但是,他们有共同的目标,就是可以通过该迭代器,来遍历访问这个容器里面的元素。
unordered_map的迭代器是一个指针,指向这个元素,通过迭代器来取得它的值。 1 unordered_map<Key,T>::iterator it;// 2 (*it).first; // the key value (of type Key) 3 (*it).second; // the mapped value (of type T) 4 (*it); // the "element value" (of type pair<const Key,T>)
它的键值分别是迭代器的first和second属性。 1 it->first; // same as (*it).first (the key value)
2 it->second; //same as (*it).second (the mapped value)
#include <iostream> #include <unordered_map> //使用散列表时需要包含此散列表<unordered_map> #include <string> using namespace std; unordered_map<string, bool> voted; //定义一个散列表名为voted,用于储存已经投过票的人的名字,其中键是字符串类型,值是bool类型 void check_voter(const string& name) //检查该名字是否投过票,没有投票就投票并保存,有就不允许投票 auto search = voted.find(name); //自动定义类型;find()是通过给定主键查找元素,没找到:返回unordered_map::end if (search == voted.end() || search->second == false) //没找到或者找到了但是值是false, search->second(the same as (*search).second)就插入 voted.insert( name, true ); // cout << "Let them vote!" << endl;; else cout << "Kick them out!" << endl; int main() check_voter("tom"); check_voter("mike"); check_voter("mike");
1 #include <utility> 2 using namespace std; 3 4 using std::cout; 5 using std::endl; 6 7 int main() 8 std::unordered_map<std::string, float> book = 9 "apple", 0.67, 10 "milk", 1.49, 11 "avocado", 1.49 12 ; 13 //初始化一个散列表 14 15 // print book 16 for (std::pair<std::string, float> pair : book) 17 //pair:objects that can hold two values of different types 18 cout << pair.first << ": " << pair.second << "$" << endl; 19 20 //print book遍历的三种方式 21 for (auto it = book.begin(); it != book.end(); ++it) 22 23 cout << it->first << ":" << it->second<<"$"<<endl; 24 25 for (auto it = book.begin(); it != book.end(); it++) 26 27 cout << (*it).first << ":" << (*it).second << "$" << endl; 28 29 30 31 32
|
以上是关于《算法图解》chap5 散列表的主要内容,如果未能解决你的问题,请参考以下文章