某比赛学到的知识总结(txt文件读取,vector,unordered_map,操作符重载)

@2020某比赛学到的知识总结

1# 如何读取txt文件中的数据
txt文件内的数据如下所示,每一行代表一个转账记录,第一列和第二列是ID,

158,295,638
295,175,594
175,158,273
23,179,329
179,121,636
121,23,309
128,231,631
231,64,627

将txt里面的每一个值读取出来,并当作int变量

        string testFile = "/data/test_data.txt";//文件绝对路径和名称
        FILE* file=fopen(testFile.c_str(),"r");//打开文件,”r“代表读权限
        int u,v,c;
        int cnt=0;
        while(fscanf(file,"%d,%d,%d",&u,&v,&c)!=EOF){
         //EOF代表结束标志,fscanf代表逐行读取,u是第一个数字
            inputs.push_back(u);
            inputs.push_back(v);
            ++cnt;
        }

## 将数据写入文件
将数组内的元素一个一个写入文件

        //O_RDWR是读写,O_CREAT,表示没有文件的话创建文件,0666代表权限
        open("/projects/student/result.txt", O_RDWR | O_CREAT,0666);
        ofstream out(outputFile);//表示向文件内写入数据
        out<<circles.size()<<endl;//通过out向文件内写入数据
        for(auto &x:circles){//
            auto path=x.path;
            int sz=path.size();
            out<<path[0];
            for(int i=1;i<sz;i++)
                out<<","<<path[i];
            out<<endl;
        }

##数据结构unordered_map<>
数据结构 unordered_map<ui,int>, 可以实现映射功能,可以快速查找元素,类似于哈希表
例如:

  vector<ui>temp;
  //temp里面是ui类型的ID值
   for(ui &x:temp){
          idHash[x]=nodeCnt++;//将ID(x)映射到0,1,2,3....也就是它在temp数组内的位置
          // //然后通过temp[i]便可以找到 x
        }     

##数据结构vector
现在大家都用vector来创建数组

    vector<Path> circles;
    vector<vector<int>> Scc;
    vector<vector<int>> A;
    vector<int>B;
    //以上创建都没有开辟空间
    vector<int> C(5,0);//直接开辟空间,并且设置初值
    //C={0,0,0,0,0}
    //vector在末尾添加元素
    A.push_back(B)
    //vector删除末尾元素
    A,pop_back();
    //对vector排序,默认升序
    sort(B.begin(),B.end());
    //删除vector内的元素
    B.erase(B.begin(),B.begin()+i)//将B[i]前的元素都删掉
    B.erase(B.begin())//删除B的首元素
    //删除vector内重复的元素,这时必须保证vector是有序的
    temp.erase(unique(temp.begin(),temp.end()),temp.end());
    //vector插入元素
    B.insert(B.begin()+i,3);//将3,插入到第i个位置也就是B[i]=3
    
    

#运算符重载:
对于结构体来说,我们来比较两个结构体对象式时,就要在结构体内重载运算符,不然就会出粗

struct Path{

    int length;
    vector<ui> path;
    Path(int length, const vector<ui> &path) : length(length), path(path) {}

    bool operator<(const Path&rhs)const{//重载”<“运算符
        if(length!=rhs.length) return length<rhs.length;
        for(int i=0;i<length;i++){
            if(path[i]!=rhs.path[i])
                return path[i]<rhs.path[i];
        }
    }
    bool operator==(const Path&rhs)const{//重载”=“运算符
        if(this->length!=rhs.length) return false;
        for(int i=0;i<this->length;i++){
            if(this->path[i]!=rhs.path[i])
                return false;
        }
        return true;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unordered_mapC++ STL中的一个容器,它提供了一种用于存储键值对的机制,其中键是唯一的,而值可以重复。unordered_map可以通过哈希表来实现,因此可以快速地插入、查找和删除元素。下面是一些unordered_map的常见操作: 1. 插入元素: 使用insert函数或[]操作符可以向unordered_map中插入键值对。例如: unordered_map<int, int> count; count.insert({1, 10}); count = 20; 2. 访问元素: 可以使用[]操作符来访问unordered_map中的元素。例如: int value = count; 3. 删除元素: 使用erase函数可以删除unordered_map中的元素。例如: count.erase(1); 4. 查找元素: 可以使用find函数来查找unordered_map中是否存在指定的键。如果元素存在,find函数会返回指向该元素的迭代器。如果元素不存在,则返回unordered_map的end迭代器。 5. 遍历元素: 可以使用范围循环或迭代器来遍历unordered_map中的键值对。例如: - 使用范围循环: ```cpp for (auto p : count) { int key = p.first; int value = p.second; // 对键值对进行操作 } ``` - 使用迭代器: ```cpp for (auto it = count.begin(); it != count.end(); ++it) { int key = it->first; int value = it->second; // 对键值对进行操作 } ``` 总结:unordered_map提供了一种方便的方式来存储和操作键值对,可以通过插入、访问、删除和查找元素来操作unordered_map。此外,还可以使用范围循环或迭代器来遍历unordered_map中的元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值