Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    [Cần giúp đỡ] Tạo chuỗi string random cho std::map

    Chào mọi người, mình là newbie. Mình đang test tốc độ của việc đọc ghi std::map này từ RAM xuống file và ngược lại (tạm thời sử dụng thư viện boost để serialization)
    Mình cần tạo một map với nhiều cặp key value dạng string ngẫu nhiên.

    Mã:
    #include <boost/archive/text_oarchive.hpp>
    #include <boost/archive/text_iarchive.hpp>
    #include <iostream>
    #include <fstream>
    #include <map>
    #include <string>
    #include <boost/version.hpp>
    #include <sstream>
    #include <boost/serialization/serialization.hpp>
    #include <boost/serialization/map.hpp>
    #include <chrono>
    
    using namespace std;
    
    string randomString(int len) {
        srand(time(0));
        string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        int pos;
        while (str.size() != len) {
            pos = ((rand() % (str.size() - 1)));
            str.erase(pos, 1);
        }
        return str;
    }
    
    void save() {
        std::map<std::string, std::string> myMap;
        string key;
        string value;
        for (int i = 0; i < 50; i++) {
            myMap[randomString(20)] = randomString(20);
        }
        
        cout << "Map size: " << myMap.size() << endl;
    
        for (map<string, string>::iterator ii = myMap.begin(); ii != myMap.end(); ++ii) {
               cout << (*ii).first << ": " << (*ii).second << endl;
        }
    
        auto start = std::chrono::high_resolution_clock::now();
        auto finish = std::chrono::high_resolution_clock::now();
        auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(finish - start).count();
        std::cout << "Time = " << duration << " milliseconds" << std::endl;
    }
    
    int main() {
        save();
        return 0;
    }
    Vấn đề mình gặp phải là trong vòng for mình tạo ra các chuỗi string random để gán vào map, nhưng khi chạy thì các giá trị sinh ra đều giống nhau nên map chỉ tồn tại một (key,value) duy nhất do các key có giá trị giống nhau.
    Mọi người giúp mình với ạ, vì sao random ra các chuỗi lại đều giống nhau?
    Cảm ơn nhiều

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    1. Thực ra điều bạn cần là std::random_shuffle ở C++11 hoặc std::shuffle ở C++14.
    2. Không nên sử dụng rand và srand từ C++11 về sau.
    3. Chỉ khởi tạo random 1 lần thôi nhé.

  3. #3
    Okie bạn, cảm ơn bạn nhé. Mình đã phát hiện ra lỗi, chỉ cần để srand(time(0) ra ngoài cùng

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •