카테고리 없음

sort with same string together

fw93 2018. 3. 26. 12:55

근데 같은 것끼리 짝지으라고 했지 굳이 string array를 sort 하라고 안 했으니까, buffer을 multi key hash table로 짜면 성능상 훨신 이득이 있다

klogk * N + N (끝)


1
2
3
4
5
6
7
8
9
10
11
12
void sortstrings(vector<string> & data) {
    unordered_multimap<stringstring> tmp;
    for (int i = 0; i < data.size(); i++) {
        string s = data.at(i);
        sort(begin(s), end(s));
        tmp.insert(pair<stringstring>(s, data.at(i)));
    }
    int i = 0;
    for (unordered_multimap<stringstring>::iterator it = tmp.begin(); it != tmp.end(); it++, i++) {
        data[i] = (*it).second;
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
void sortstrings3(vector<string> & data) {
    multimap<stringstring> tmp;
    for (int i = 0; i < data.size(); i++) {
        string s = data.at(i);
        sort(begin(s), end(s));
        tmp.insert(pair<stringstring>(s, data.at(i)));
    }
    int i=0;
    for (multimap<stringstring>::iterator it = tmp.begin(); it != tmp.end(); i++, it++) {
        data[i] = (*it).second;
    }
}
 
 
bool comparitor(string s1, string s2) {
    sort(begin(s1), end(s1));
    sort(begin(s2), end(s2));
    return s1 > s2;
}
 
void sortstrings(vector<string> & data) {
    sort(data.begin(),data.end(), comparitor);
}
 
 
 
void sortstrings2(vector<string> &data) {
    vector<pair<string,string>> *tmp = new vector<pair<string,string>>();
    for (int i = 0; i < data.size(); i++) {
        string s = data.at(i);
        sort(begin(s), end(s));
        tmp->push_back(pair<stringstring>(s, data.at(i)));
    }
    sort(tmp->begin(), tmp->end());
    for (int i = 0; i < tmp->size(); i++) {
        data[i] = tmp->at(i).second;
    }
}
 
 
int main9() {
    vector<string> v1 = { "asdasd","ddwdwd","gwegweg","aabbc","cbbaa","gwerewgew","bbcaa","ewqeqweqwe" };
    sortstrings3(v1);
    for (string s : v1) {
        cout << s << endl;
    }
    while (1) {};
    return 0;
}
cs