std::experi...th::compare(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::experi...th::compare(3) πŸ’–

okay so bestie, this page is std::experi...th::compare(3), and it comes from the C++ Standard Libary (yes, that spelling is literally what’s in the manual πŸ’€). It’s all about comparing the lexical representations of paths in the filesystem TS. Let’s get into it 🫢.


✨ NAME ✨

std::experimental::filesystem::path::compare β€” std::experimental::filesystem::path::compare

πŸ¦‹ Synopsis πŸ¦‹

int compare( const path& p ) const noexcept; (1) (filesystem TS)
int compare( const string_type& str ) const; (2) (filesystem TS)
int compare( const value_type* s ) const;    (3) (filesystem TS)

Compares the lexical representations of the path and another path.

  1. Returns a value less than, equal to or greater than 0 if the native representation of the path (native()) is respectively lexicographically less than, equal to or greater than the native representation of p (p.native()). Comparison is performed element-wise, as if by iterating both paths from begin() to end().
  2. Equivalent to compare(path(str)).
  3. Equivalent to compare(path(s)).

🌸 Parameters 🌸

  • p β€” a path to compare to
  • str β€” a string representing path to compare to
  • s β€” a null-terminated string representing path to compare to

πŸŽ€ Return value πŸŽ€

  • A value less than 0 if the path is lexicographically less than the given path.
  • A value equal to 0 if the path is lexicographically equal to the given path.
  • A value greater than 0 if the path is lexicographically greater than the given path.

πŸ’… Exceptions πŸ’…

  • 2,3) May throw implementation-defined exceptions.

πŸ”₯ Notes πŸ”₯

For two-way comparisons, binary operators may be more suitable.

🌈 Example 🌈

// Run this code

#include <experimental/filesystem>
#include <iostream>
namespace fs = std::experimental::filesystem;

void demo(int rc, fs::path p1, fs::path p2)
{
    if (rc < 0)
        std::cout << p1 << " < " << p2 << '\n';
    else if (rc > 0)
        std::cout << p1 << " > " << p2 << '\n';
    else if (rc == 0)
        std::cout << p1 << " = " << p2 << '\n';
}

int main()
{
    fs::path p1 = "/a/b/"; // as if "a/b/." for lexicographical iteration
    fs::path p2 = "/a/b/#";
    demo(p1.compare(p2), p1, p2);
    demo(p1.compare("a/b/_"), p1, "a/b/_");
}

Output:

"/a/b/" > "/a/b/#"
"/a/b/" < "a/b/_"

πŸ‘‘ See also πŸ‘‘

  • operator==
  • operator!=
  • operator< β€” lexicographically compares two paths (function)
  • operator<= β€” (function)
  • operator>
  • operator>=

🧚 Category 🧚

  • Noindexed pages

byeee bestie πŸ’– β€” this iconic page came from http://cppreference.com, and its version/date stamp is 2024.06.10 (page: std::experi...th::compare(3)). slay πŸŽ€βœ¨

πŸ“¦ where this page comes from