根据特定数据对字符串进行排序的最佳方法是什么

What is the best way for sorting string according specific data

本文关键字:排序 最佳 是什么 方法 字符串 数据      更新时间:2023-10-16

我从不同的设备通过 tcp 协议 8 行。

线条示例:"12:10:00,GS,继续,休息/n"。

如何将两个结果(每个源 8 行)输入到排序容器(映射或prioriy_queue?它应该根据第一个数据(时间)对它们进行排序吗?

你来了:

#include <iostream>
#include <sstream>
#include <vector>
#include <stdlib.h>
#include <iterator>
#include <algorithm>
#include <set>

class TimeComparator
{
public:
    inline static unsigned long int converToSecond(std::string time)
    {
            std::string delemeter = ":";
            std::vector<std::string> dataVec;
            size_t pos = 0;
            while((pos = time.find(delemeter)) != std::string::npos)
            {
                    dataVec.push_back(time.substr(0, pos));
                    time.erase(0, pos + delemeter.length());
            }
            int hour = atoi(dataVec[0].c_str());
            int min = atoi(dataVec[1].c_str());
            unsigned long int seconds = hour*60*60 + min*60;
            return seconds;
    }
    inline static bool compareTimeInHHMMFormat(std::string lhsTime, std::string rhsTime)
    {
            unsigned long int lhsSec = converToSecond(lhsTime);
            unsigned long int rhsSec = converToSecond(rhsTime);
            if(lhsSec <= rhsSec)
                    return true;
            else
                    return false;
    }
};

class Comparator
{
public:
    bool operator() (const std::string lhs, const std::string rhs) const
    {
            std::vector<std::string> vec;
            std::vector<std::string> timeVec;
            vec.push_back(lhs);
            vec.push_back(rhs);
            auto it = vec.begin();
            for(it; it != vec.end(); it++)
            {
                    std::istringstream ss(*it);
                    std::string token;
                    std::getline(ss, token, ',');
                    timeVec.push_back(token);
            }
            return TimeComparator::compareTimeInHHMMFormat(timeVec[0], timeVec[1]);
    }
};
int main()
{
    std::string input1 = "12:10:00, gs, continue, break/n";
    std::string input2 = "10:10:00, gs, continue, break/n";
    std::set<std::string, Comparator> timeSet;
    timeSet.insert(input1);
    timeSet.insert(input2);
    std::copy(timeSet.begin(),timeSet.end(),       std::ostream_iterator<std::string>(std::cout, "n"));
}
Output:
techie@gateway2:myExperiments$ ./a.out
10:10:00, gs, continue, break/n
12:10:00, gs, continue, break/n