다음 문자열이 있습니다. 1465883175.476876 RX 0x03 0x00000000
1465883175.606049 RX 0x00 0x00000000
1465883175.783562 RX 0x02 0x00000000
1465883175.906900 RX 0x03 0x00000000
1465883176.051490 RX 0x00 0x00000000
1465883176.201903 RX 0x03 0x00000000
이중 유형 (c ++) 인 첫 번째 데이터에 따라 정렬 할 컨테이너에 어떻게 입력 할 수 있습니까?
가장 효과적인 방법으로해야합니다.
std :: set 컨테이너 사용을 고려하지만이 컨테이너에서는 컨테이너의 두 요소가 동등한 키를 가질 수 없습니다. 어떤 경우 든 문자열은 동일한 숫자를 포함 할 수 있습니다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>
int main() {
std::vector<std::string> s{
"1465883175.476876 RX 0x03 0x00000000"
,"1465883175.606049 RX 0x00 0x00000000"
,"1465883175.783562 RX 0x02 0x00000000"
,"1465883175.906900 RX 0x03 0x00000000"
,"1465883176.051490 RX 0x00 0x00000000"
,"1465883176.201903 RX 0x03 0x00000000"};
auto cmp = [](const std::string &f, const std::string &s) {
double n1 = 0.0;
size_t processed1{0};
auto sub_str1 = f.substr(0, f.find(" "));
try {
n1 = std::stod(sub_str1, &processed1);
if (processed1 != sub_str1.size()) {
// TODO
}
} catch (std::invalid_argument ia) {
// TODO
} catch (std::out_of_range oor) {
// TODO
}
double n2 = 0.0;
size_t processed2{0};
auto sub_str2 = s.substr(0, s.find(" "));
try {
n2 = std::stod(sub_str2, &processed2);
if (processed2 != sub_str2.size()) {
// TODO
}
} catch (std::invalid_argument ia) {
// TODO
} catch (std::out_of_range oor) {
// TODO
}
return n1 > n2;
};
std::priority_queue<std::string, std::vector<std::string>, decltype(cmp)> q(cmp);
for (const auto &c : s) {
q.push(c);
}
while (!q.empty()) {
std::cout << q.top() << "\n";
q.pop();
}
return 0;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다