手撕题解02 | 字符串哈希

字符串哈希

https://www.nowcoder.com/practice/dadbd37fee7c43f0ae407db11b16b4bf

#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;

int main() {
    //关闭C++流和c流的同步,解绑cin和cout
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    unordered_set<string> unset;
    for(int i=0; i<n; i++){
        string s;
        cin >> s;
        unset.insert(s);
    }
    cout << unset.size() << '\n';
    return 0;
   
}
// 64 位输出请用 printf("%lld")

1.为什么选择cin套系而不是scanf?

(1)cin写法简洁,无需记格式符

(2)cin原生支持string

(3)cin虽然效率不如scanf,但是有解决方案

2.为什么加上关闭C++流和c流的同步,解绑cin和cout?

ios::sync_with_stdio(false);:关闭 C++ 流(cin/cout)和 C 流(scanf/printf)的同步关系,不需要共享缓冲区

cin.tie(nullptr);:解绑 cin 和 cout 的绑定关系,cout 输出时不再自动刷新 cin 的缓冲区,进一步减少系统调用开销。

这两步骤可以降低计算开销

这样做有弊端但是影响很小

(1)如果混用C++流和C流会导致顺序混乱数据错误的问题,但是基本上都配套使用,不影响。

(2)cout遇到endl本来会自动刷新缓冲区立刻输出数据,但是解绑后会延迟,可以使用\n来解决

3.什么是哈希表?说说你的理解?

哈希表是以空间换取时间的一种数据结构,可以通过哈希函数把元素映射成整数,方便查找元素的存在性。

哈希表有两种,无值的哈希集合unordered_set和键值对集合unordered_map。区别如下:

全部评论

相关推荐

03-19 10:36
云南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务