कहो कि मेरे पास पूर्णांक का वेक्टर है:
std::vector<int> indices;
for (int i=0; i<15; i++) indices.push_back(i);
फिर मैं इसे अवरोही क्रम में क्रमबद्ध करता हूं:
sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];})
for (int i=0; i<15; i++) printf("%i\n", indices[i]);
यह निम्नलिखित उत्पादन करता है:
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
अब मैं संख्या 3, 4, 5 और 6 को अंत तक ले जाना चाहता हूं, और उनके लिए अवरोही क्रम (अधिमानतः sort
दूसरी बार उपयोग किए बिना ) रखना चाहता हूं । यानी, यहाँ वही है जो मैं चाहता हूँ:
14
13
12
11
10
9
8
7
2
1
0
6
5
4
3
मुझे std::sort
इसे प्राप्त करने के लिए तुलनात्मक फ़ंक्शन को कैसे संशोधित करना चाहिए ?
std::greater
से <functional>
अपने लैम्ब्डा के स्थान पर इस्तेमाल किया जा सकता। आपके प्रश्न के अनुसार, एक अधिक वर्बोज़ तुलनित्र लिखना जो आपके मूल्यों को सुनिश्चित करता है कि आप जिस तरह से चाहते हैं वह तुलना करना सबसे आसान तरीका है।
return first > second
।
return indices[first] > indices[second]
क्या आपका मतलब नहीं हैreturn first < second;
?