Std का उपयोग करके cpp में स्ट्रिंग्स की सॉर्टिंग सरणी: सॉर्ट
मैं इस तरह की साइटों से कुछ सुझावों का पालन करते हुए, तार के एरेज़ (हाँ, वैक्टर नहीं) को सॉर्ट करने की कोशिश कर रहा हूं । यह वह कोड है जो मैंने अब तक लिखा था, लेकिन यह हमेशा इस लंबी त्रुटि (जिसका Google पर कोई परिणाम नहीं है) को प्रिंट करता है। इसे कैसे सुधारा जा सकता है?
#include <algorithm>
#include <cstring>
#include <iostream>
//qsort(names, n, 15, (int (*)(const void *, const void *))strcmp);
int main()
{
std::cout << "hi";
char arr[3][6];
strcpy(arr[0], "hello"), strcpy(arr[1], "hillo"), strcpy(arr[2], "hallo");
std::sort(arr, arr + 3, [](char const *lhs,
char const *rhs) { return strcmp(lhs, rhs) < 0; });
//qsort(arr, 3, 20, (int (*)(const void *, const void *))strcmp);
for (int i = 0; i < 3; ++i)
std::cout << arr[i] << '\n';
}
जवाब
यह त्रुटि संदेश का प्रासंगिक हिस्सा है:
त्रुटि: सरणी को ब्रेस-एनक्लोज़्ड इनिशियलाइज़र के साथ आरंभीकृत किया जाना चाहिए
जो दुर्भाग्य से बहुत स्पष्ट नहीं है, लेकिन ओट छँटाई कार्यान्वयन के भीतर से आता है। तो, आइए हम एल्गोरिथम की पूर्व शर्त को संशोधित करें:
std::sortतत्वों की अदला-बदली करके लागू किया जाता है। जैसे, इसके लिए यह आवश्यक है कि तत्व स्वैच्छिक हों। आपके सरणी के तत्व सरणियाँ हैं। ऐरे स्वैग नहीं हैं। इसलिए सारणियों का एक सरणी छंटनी योग्य नहीं है।
"स्ट्रिंग" प्रकार का उपयोग करके यहां काम करेंगे?
का उपयोग करते हुए std::stringकाम करेंगे। यह बदली है। आपको कस्टम तुलना फ़ंक्शन की भी आवश्यकता नहीं होगी क्योंकि यह तुलनात्मक भी है।
क्या सरणियों को अप्राप्य और अन्य प्रकार को स्वैपेबल बनाता है
स्वैप को इनीशियल मूवमेंट (और असाइनमेंट) द्वारा कार्यान्वित किया जाता है। भाषा के नियम कहते हैं कि सरणी प्रारंभिक नहीं है (न ही यह असाइन करने योग्य है)। यह जानने के बाद, देखें कि क्या गड़बड़ी कुछ गड़बड़ करती है।
आप सॉर्ट इनबिल्ट फ़ंक्शन का उपयोग करके सरणी के सरणी को सॉर्ट नहीं कर सकते। आप स्ट्रिंग की सरणी के माध्यम से पार कर सकते हैं और प्रत्येक स्ट्रिंग (स्ट्र) का उपयोग करके सॉर्ट कर सकते हैं sort(str.begin(), str.end())।