std :: cd+ प्रकार का libcxx (C++ मानक लाइब्रेरी का llvm संस्करण) समान तत्व के साथ तुलना अनुमानित करता है यानी तुलनात्मक विक्टर के तर्क दोनों को संदर्भित करते हैं अनुक्रमित करने के क्रम में स्थिति। बिंदु को चित्रित करने के लिए एक संक्षिप्त उदाहरण।तुलनात्मक फ़ंक्शन
$ cat a.cc
#include <algorithm>
#include <vector>
#include <cassert>
int main(int argc, char** argv) {
int size = 100;
std::vector<int> v(size);
// Elements in v are unique.
for (int i = 0; i < size; ++i)
v[i] = i;
std::sort(v.begin(), v.end(),
[&](int x, int y) { assert(x != y); return x < y; });
return 0;
}
$ clang++ -std=c++11 -stdlib=libc++ a.cc -o a.out
$ ./a.out
a.out: a.cc:14: auto main(int, char **)::(anonymous class)::operator()(int, int) const: Assertion `x != y' failed.
./go.sh: line 5: 19447 Aborted (core dumped) ./a.out
libstdC++ के साथ ठीक काम करता है।
$ clang++ -std=c++11 -stdlib=libstdc++ a.cc -o a.out
$ ./a.out
क्या यह समान तत्व के साथ तुलना फ़ंक्शन को कॉल करना ठीक है। यह अनावश्यक नहीं है।
"क्या यह ठीक है" से आपका क्या मतलब है? क्या आप पूछ रहे हैं कि मानक द्वारा इसकी अनुमति है या नहीं? –
मुझे नहीं लगता कि मानक की ऐसी कोई आवश्यकता है, मैं ज्यादातर एल्गोरिदमिक दृष्टिकोण से रूचि रखता हूं कि क्यों कोई भी समान तत्व के साथ तुलना फ़ंक्शन को कॉल करेगा। क्या यह किसी भी मौके से तेजी से छंटनी करता है, या यह सिर्फ एक बग है। –
एफवाईआई, https://llvm.org/bugs/show_bug.cgi?id=20837 –